Dana Jansens [Mon, 8 Aug 2011 21:44:06 +0000 (17:44 -0400)]
Add functions to set the value of an xml node
Dana Jansens [Mon, 8 Aug 2011 21:38:47 +0000 (17:38 -0400)]
Add a function to save a cache file (it makes the directory as needed etc).
Dana Jansens [Mon, 8 Aug 2011 20:39:24 +0000 (16:39 -0400)]
add obt_xml_load_cache_file() to load a file in ~/.cache/<domain>/<file>
Dana Jansens [Mon, 8 Aug 2011 16:35:52 +0000 (12:35 -0400)]
Make the ConfigValue list type into a gchar** string list instead.
1. I don't want to have to deal with nested lists cuz they just don't need to
happen (now).
Dana Jansens [Mon, 8 Aug 2011 16:34:17 +0000 (12:34 -0400)]
Add obt_xml_path_get_list() that returns a list of xml nodes that match the given path.
<foo>
<b>hi</b>
<b>i'm</b>
<b>a</b>
<b>list</a>
</foo>
It would return all the b nodes above for the path "foo/b".
Dana Jansens [Mon, 8 Aug 2011 15:33:37 +0000 (11:33 -0400)]
don't create empty xml nodes when there is no default value given for them. NULL != ""
Dana Jansens [Mon, 8 Aug 2011 14:51:45 +0000 (10:51 -0400)]
Turn the Foo/ToggleFoo/UnFoo actions into a single Foo action with option "set" which is "on", "off", or "toggle"
Dana Jansens [Sat, 6 Aug 2011 00:54:59 +0000 (20:54 -0400)]
Use ObConfigValue to parse gravity coords, remove parse special functions from config.[ch]
Dana Jansens [Sat, 6 Aug 2011 00:36:51 +0000 (20:36 -0400)]
Rename obt_xml_find_node() to obt_xml_find_sibling(). Add obt_xml_tree_get_node() and xml_tree_delete_node()
Dana Jansens [Thu, 4 Aug 2011 17:43:34 +0000 (13:43 -0400)]
Fix interactive actions with the new action running code.
It was running the interactive action init code when running an interactive
action that is already running.
Dana Jansens [Fri, 5 Aug 2011 15:35:09 +0000 (11:35 -0400)]
Rename ObActionValue to ObConfigValue. This holds one of three types.
1. A string
2. A list of other ObConfigValues
3. A list of actions (ObActionList).
The string type can be returned in various ways such as int, enum, fraction, gravity coordiate.
Provide a ways to save the ObConfigValue into a pointer. This lets you keep
the value contained withing the ObConfigValue in a variable of its basic type.
Dana Jansens [Wed, 3 Aug 2011 21:03:30 +0000 (17:03 -0400)]
register filters on startup
TODO:
1. write filters for everything in actions/if.c
2. rm actions/if.c
3. make action(s) to change config options?
includes key and mouse binding
4. rm -rf *xml*?
Dana Jansens [Wed, 3 Aug 2011 21:03:11 +0000 (17:03 -0400)]
parse filters and actionlists inside an action list correctly
Dana Jansens [Wed, 3 Aug 2011 20:58:23 +0000 (16:58 -0400)]
Pass a client set to all actions, and make focus cycling use a client set.
Dana Jansens [Wed, 3 Aug 2011 20:57:21 +0000 (16:57 -0400)]
Provide operations to get the size of a ObClientSet, and get the clients in it. Also bug fixes.
Dana Jansens [Wed, 3 Aug 2011 15:32:02 +0000 (11:32 -0400)]
Add functions to ObClientSet to run a function on each client in the set, and add constness.
Anything that doesnt change/destroy the given set takes a const ObClientSet*.
Dana Jansens [Tue, 2 Aug 2011 20:28:19 +0000 (16:28 -0400)]
Generate a fake leave event on actions that move windows (used to generate another enter event?)
Dana Jansens [Tue, 2 Aug 2011 20:27:33 +0000 (16:27 -0400)]
Rename the fields in ObActionListRun for clarity
Dana Jansens [Tue, 2 Aug 2011 19:55:44 +0000 (15:55 -0400)]
Add action_list_run.c/h with action_list_run() and struct ObActionListRun.
This function runs an action list, taking over from the function that used to
live in action.c. Now the action.c function will simply run a single action.
The actions and filters now take a const ObActionListRun* which describes
the user event which triggered the actions/filters to run.
The action_list_run() function can also run filters, yay. However...
TODO:
1. the filters' client sets are not passed to actions yet. do this.
2. make action(s) to change config options
includes key and mouse binding
3. rm -rf *xml*
Dana Jansens [Tue, 2 Aug 2011 18:45:21 +0000 (14:45 -0400)]
Add a means to duplicate ObClientSet
and fix destroy notifications.
- set the destroy notification when making a set with a single window, not
when making an empty set.
- always add/remove the destroy notification when creating/destroying the hash
table
Dana Jansens [Tue, 2 Aug 2011 18:20:14 +0000 (14:20 -0400)]
Add the minus and contains() operations to ObClientSet, and allow creating a set of any single client.
Dana Jansens [Tue, 2 Aug 2011 17:31:23 +0000 (13:31 -0400)]
Fix expand/reduce in the full or empty set cases.
Dana Jansens [Fri, 29 Jul 2011 21:35:31 +0000 (17:35 -0400)]
Make empty ObClientSet objects not hold a hash table.
This saves creating one every time we make an empty set (boolean filter
false result)
Dana Jansens [Fri, 29 Jul 2011 21:28:14 +0000 (17:28 -0400)]
make a special "ALL" ObClientSet which contains all clients.
This saves copying all the clients into the set.
IMPORTANT: This client set will test as a "true" boolean regardless of if there
are clients present or not.
- We did this to allow for boolean filters. A boolean filter returns the
"ALL" set for its true value, and an empty set for its false value.
Dana Jansens [Fri, 29 Jul 2011 20:59:16 +0000 (16:59 -0400)]
add the "all" and "target" filters
Dana Jansens [Fri, 29 Jul 2011 20:57:55 +0000 (16:57 -0400)]
Pass a user data to the client_set_reduce/expand function which is given to the
callback.
This lets us pass the filter's context in to its test function along with the
client window, so it can make an intelligent decision about adding/removing
the client from the current set.
Dana Jansens [Fri, 29 Jul 2011 20:52:59 +0000 (16:52 -0400)]
Stick an ObClientSetReduce/ExpandFunc directly in the filter definition.
Saves a redirection to the filter just to go to the client_set_reduce/expand
function.
Dana Jansens [Fri, 29 Jul 2011 20:42:15 +0000 (16:42 -0400)]
Rename actions/all.[ch] and filters/all.[ch] to _all.[ch]
There will actually be an "all" filter so this clashed.
Dana Jansens [Fri, 29 Jul 2011 20:37:41 +0000 (16:37 -0400)]
Actions say what kind of filter they would like by default (one window or all)
Dana Jansens [Fri, 29 Jul 2011 20:18:53 +0000 (16:18 -0400)]
make empty sets still a ObClientSet* structure and not a NULL.
so we can differentient between a missing set and an empty set.
Dana Jansens [Fri, 29 Jul 2011 20:01:11 +0000 (16:01 -0400)]
Use ObClientSet objects in the filter system, so filters work on these sets.
Dana Jansens [Fri, 29 Jul 2011 20:00:02 +0000 (16:00 -0400)]
Add ObClientSet data type. It holds a set of clients !
The sets can be modified by union and intersection, and can have clients
added or removed with a test callback function.
They use a GHashTable underneath.
Dana Jansens [Fri, 29 Jul 2011 19:58:35 +0000 (15:58 -0400)]
Keep track of the currently targetted client for user events in event.c/h
Dana Jansens [Fri, 29 Jul 2011 19:08:12 +0000 (15:08 -0400)]
Add filters/all.c which will run startup on all the filters to register them
Dana Jansens [Thu, 28 Jul 2011 19:45:43 +0000 (15:45 -0400)]
Add a generic filter system similar to the action system (not connected to anything yet)
Dana Jansens [Thu, 28 Jul 2011 18:43:55 +0000 (14:43 -0400)]
Rename ObActions* to ObAction* and remove more 3.4-compat action stuff that was missed.
Dana Jansens [Thu, 28 Jul 2011 18:07:22 +0000 (14:07 -0400)]
rm some unused fn defns
Dana Jansens [Thu, 28 Jul 2011 18:05:54 +0000 (14:05 -0400)]
rm the actions_parse* functions which parsed xml actions
Dana Jansens [Thu, 28 Jul 2011 18:03:28 +0000 (14:03 -0400)]
rm some unused struct defns cruft
Dana Jansens [Wed, 27 Jul 2011 20:32:05 +0000 (16:32 -0400)]
Parse ObActionsList*s from the config file (out of the xml for now).
- config.c: use the new actions parser
- actions.c: provide the actions parser a way to create a new action (takes
a hash table of options for it)
- actions/*.c: take a hash table of options instead of an xml subtree
- *: us ObActionsList* instead of a GList* of ObActionAct*s.
TODO:
1. make filters
openbox/filters/*.c
openbox/filters.c as interface to them
store filters in parsed filter tests instead of key/value pairs
2. make action(s) to change config options
includes key and mouse binding
3. rm -rf *xml*
Dana Jansens [Tue, 26 Jul 2011 22:06:42 +0000 (18:06 -0400)]
Add a parser for the action command language.
The parser generates list of actions (complete with filters). The parser isn't
called anywhere yet, and uses the incomplete actions_act_new() function.
TODO:
The filters now are just text string key:value pairs. But they should
become intelligent objects like actions are.
The actions need to change their option parsing from XML to the new key:value
pair lists.
Dana Jansens [Thu, 27 Oct 2011 17:29:30 +0000 (13:29 -0400)]
Link X into libobt (Fixes compile on debian).
Dana Jansens [Wed, 26 Oct 2011 14:30:37 +0000 (10:30 -0400)]
Ignore enters on windows that are raised over focused window while being mapped.
Dana Jansens [Sun, 16 Oct 2011 15:50:15 +0000 (11:50 -0400)]
Use the KeyCode to directly find the modifier mask. (bug #5173)
We were finding the KeySym first, and then converting back to a modifier mask.
But KeySym on a key's release can differ from on its press, and we don't need
them to determine the modmask from the keycode.
[setxkbmap -option "grp:shifts_toggle"] turns Shift_L into XK_ISO_Prev_Group on
key release, and Shift_R into XK_ISO_Next_Group.
Dana Jansens [Sun, 16 Oct 2011 15:13:14 +0000 (11:13 -0400)]
check RECT_INTERSECTS_RECT before using RECT_SET_INTERSECTION
Dana Jansens [Sun, 16 Oct 2011 15:10:14 +0000 (11:10 -0400)]
Don't make desktop switching interactive when no mods used. (bug #5203)
Make mod state passing more consistent, and always give actions the full state
instead of stripping sometimes. (They ended up expecting it stripped always).
Dana Jansens [Sun, 16 Oct 2011 03:04:21 +0000 (23:04 -0400)]
Pick the monitor most relevant to a rectangle more cleverly.
When monitors overlap (this happens with cloning), we were choosing a monitor
to associate with a window, for maximization for example, somewhat arbitrarily.
Now we have a more clever algorithm that considers the configured primary
monitor first, and that does not prefer monitors based on their sizes, but only
only how much of the window is in the monitor, excluding parts that were claimed
by another monitor already.
Dana Jansens [Sat, 15 Oct 2011 00:48:54 +0000 (20:48 -0400)]
Select the menu item under the mouse when the mouse is moved (bug #5237)
Dana Jansens [Fri, 14 Oct 2011 23:42:37 +0000 (19:42 -0400)]
Make ResizeRelative resize in terms of pixels for windows with resize increments (bug #5228)
If the resize is less than the window's resize increment then we bump it up
to ensure a resize does at least happen.
Dana Jansens [Mon, 8 Aug 2011 19:42:48 +0000 (15:42 -0400)]
Make the inactive osd text color fall back to the old osd property, and lastly inherit from the unfocused window color.
Dana Jansens [Fri, 5 Aug 2011 15:00:53 +0000 (11:00 -0400)]
Allow an xml tag to be unregistered from the xml parser.
Dana Jansens [Wed, 3 Aug 2011 21:26:43 +0000 (17:26 -0400)]
Fix release scripts: test en .po files for correct version. correctly find previous version tag in git and display it.
Dana Jansens [Tue, 2 Aug 2011 19:53:42 +0000 (15:53 -0400)]
Fix prompt cleanup (was not going through the list correctly when freeing items)
Dana Jansens [Mon, 4 Oct 2010 18:33:16 +0000 (14:33 -0400)]
Create some Openbox release scripts:
release/bugs: Prints a list of bugs that are mentioned in git commits for a
git revision, since previous release.
- Very useful for updating the CHANGELOG file!
release/go: Tests a git revision for correct compilation, and prepares files
for release.
- Makes the tarball
- Makes a GPG signature for the tarball
- Tags the release
- Spits out URLs to edit and gives the changelog for copy/paste.
release/email: Sends an email to the Openbox mailing list with the changelog
and details about the release. Call this with the same parameters used for
running release/go once it is finished, and the files are uploaded, etc.
- Also emails mikachu re freshmeat.net
Dana Jansens [Fri, 29 Jul 2011 19:59:22 +0000 (15:59 -0400)]
Allow client destroy notify functions to be removed based on the data associated with them.
Dana Jansens [Sun, 24 Jul 2011 23:29:26 +0000 (19:29 -0400)]
Properly build path names for TryExec
Dana Jansens [Thu, 27 Jan 2011 22:30:45 +0000 (17:30 -0500)]
add menu_sort_entries() which sorts all entries in an ObMenu
this function sorts each group of entries that appear together between two
consecutive separators (or ends of the list)
Dana Jansens [Thu, 27 Jan 2011 22:23:47 +0000 (17:23 -0500)]
Add another BSEARCH function that lets you search through an array of objects.
If you give it a value x, the macro lets you pull a value out of each object
that you want to compare to x.
Dana Jansens [Tue, 25 Jan 2011 18:32:43 +0000 (13:32 -0500)]
skip empty strings when splitting paths in the environment
Dana Jansens [Mon, 24 Jan 2011 22:00:41 +0000 (17:00 -0500)]
hide the menus before shutting them down on reconfigure
Dana Jansens [Mon, 24 Jan 2011 21:45:56 +0000 (16:45 -0500)]
Fix for when the menu's update function returns FALSE and no menu is shown.
The ObMenuFrame was not being freed, and the child pointer was being left
pointing to the frame that was not visible.
Dana Jansens [Mon, 17 Oct 2011 19:48:31 +0000 (15:48 -0400)]
Quiet build outbut on by default
Dana Jansens [Sun, 16 Oct 2011 14:50:51 +0000 (10:50 -0400)]
Fix window width/height going less than 1 on some platforms (bug #5246)
Dana Jansens [Sun, 16 Oct 2011 02:45:03 +0000 (22:45 -0400)]
ignore .rej files
Dana Jansens [Sun, 16 Oct 2011 01:04:54 +0000 (21:04 -0400)]
Fix maximized windows and such after screen resizings
Dana Jansens [Sun, 16 Oct 2011 01:04:21 +0000 (21:04 -0400)]
Hear screen resizes when they don't change the root window (cloning)
Dana Jansens [Sat, 15 Oct 2011 19:37:58 +0000 (15:37 -0400)]
Check the return value for launching the startup command.
Copy/paste error?
Dana Jansens [Sat, 15 Oct 2011 19:07:59 +0000 (15:07 -0400)]
Fixes for gnome-session 3.
We run by default with a panel (default gnome-panel) and then run Openbox
without any panel if one cannot be found.
- Adds a fallback session for if a panel (default gnome-panel) not found.
- Removes notifications as a requirement. Seems to be a legacy thing judging
from the ubuntu .session files. Notifications are being provided by
notify-osd on modern systems, and you can't check for its presence in
gnome-session (gnome-classic.session always fails because it looks for it, so
ubuntu falls back to gnome-fallback.session).
Dana Jansens [Sat, 15 Oct 2011 17:42:30 +0000 (13:42 -0400)]
Remove unused variable
Dana Jansens [Sun, 16 Oct 2011 00:07:57 +0000 (20:07 -0400)]
respect the active/mouse options for monitor placement, and use ObMonitorPlace for per-app too
Dana Jansens [Fri, 14 Oct 2011 23:24:45 +0000 (19:24 -0400)]
Allow per-app settings to pick a monitor for a window without choosing a position in it.
Dana Jansens [Fri, 14 Oct 2011 23:12:11 +0000 (19:12 -0400)]
Add "active" and "primary" options to the <monitor> placement option for per-app settings (bug #5180)
Dana Jansens [Fri, 14 Oct 2011 22:54:32 +0000 (18:54 -0400)]
make undecorated windows place according to their undecorated state (bug #5179)
splits client_setup_decor_and_functions() into 3 functions.
1. add client_setup_default_decor_and_functions()
- called from client_get_all() to get the maximum decor/functions that will
be available for use by the client.
2. add client_setup_decor_undecorated()
- sets up the client's undecorarted decor if the flag is set by the per-app
settings or session state.
- we do this before setting up the frame so the frame reflects the window as it
should be when getting placed.
3. client_setup_decor_and_functions()
- calls the above 2 to perform the same functions as before.
- added to client_apply_startup_state() so that we can ensure it was run fully
at least once in the mapping process, since it is not called in
client_get_all() anymore.
Dana Jansens [Fri, 14 Oct 2011 22:52:36 +0000 (18:52 -0400)]
it would seem this cannot return NULL now
It will get the primary monitor if there is not monitor under the pointer. But
assert so it's clear something went wrong if this does happen. Note that there
was previously no check for the return value even though the comment claimed
there should be.
Fryderyk Dziarmagowski [Fri, 14 Oct 2011 21:41:43 +0000 (17:41 -0400)]
Link libobt into libobrender, as it uses things from libobt (bug #5150)
libobrender uses ObtPaths stuff, so it needs to link in libobt.
Dana Jansens [Fri, 14 Oct 2011 21:39:24 +0000 (17:39 -0400)]
Propagate _NET_WM_WINDOW_OPACITY to the frame window (bug #5132)
Dana Jansens [Fri, 14 Oct 2011 21:06:05 +0000 (17:06 -0400)]
Strip leading/trailing whitespace when parsing colors and other strings (bug #4937)
Dana Jansens [Fri, 14 Oct 2011 21:17:22 +0000 (17:17 -0400)]
free undecorated border colors
Carlos Pita [Fri, 14 Oct 2011 21:01:18 +0000 (17:01 -0400)]
Specific border width/color for undecorated active/inactive windows (bug #4889)
The attached patch adds three theme options with backward compatible defaults:
undecorated.border.width
defaults to border.width
window.undecorated.active.border.color
defaults to window.active.border.color
window.undecorated.inactive.border.color
defaults to window.inactive.border.color
Dana Jansens [Fri, 14 Oct 2011 20:43:18 +0000 (16:43 -0400)]
Fix crash when keyboard map changes and no keybindings exist.
Don't assume old tree is non-null and start rebinding it.
Mikael Magnusson [Thu, 4 Aug 2011 16:34:54 +0000 (18:34 +0200)]
Change default doubleclick timeout to 500ms and keep track of where last click was
Bug #5152 - "mouse double-click time is too low by default - 200ms"
We only use the doubleclick in one place in the default configuration,
for doubleclicking titlebars to maximize windows, so any negative impact
of increasing the timeout should be minimal, especially with the
addition of requiring the two clicks to be in the same place.
Doubleclicks are hardcoded to occur within 8 pixels for now, it doesn't
seem worth it to add a config until someone complains. A possibility is
using the drag threshold, but some people have that set very low so it
could be hard to doubleclick then.
Dana Jansens [Sat, 15 Oct 2011 19:45:27 +0000 (15:45 -0400)]
Parse all the actions in a single menu item
Dana Jansens [Tue, 11 Oct 2011 22:03:24 +0000 (18:03 -0400)]
Don't remove openbox-gnome.session on make clean - it's not generated.
Geoffrey Antos [Fri, 7 Oct 2011 13:29:30 +0000 (09:29 -0400)]
Make openbox-gnome-session compatible with gnome3 with gnome-session 3.0+ support.
Yay they did something nice and made it easier for other window managers to be used. How unexpected and pleasant.
Dana Jansens [Thu, 6 Oct 2011 14:03:52 +0000 (10:03 -0400)]
Don't show prompts inside the message handler to prevent recursion
Showing prompts causes messages to be created which causes the glib message
handler to abort(). Save the messages and show them when done all other
processing for the current event.
Dana Jansens [Thu, 29 Sep 2011 16:52:07 +0000 (12:52 -0400)]
bug #5253 kde4 is out now, use kde4 menus by default.
Startup scripts should export "XDG_MENU_PREFIX=kde-4-" but they export
"XDG_MENU_PREFIX=kde-".
Dana Jansens [Tue, 30 Aug 2011 15:14:06 +0000 (11:14 -0400)]
Make "no" a valid choice for the dialog option in cyclewindows.c.
It is the same as "none" for backward compatibility (it used to be a boolean).
Mikael Magnusson [Tue, 13 Sep 2011 18:39:12 +0000 (20:39 +0200)]
Update copyright notice in --version output
Mikael Magnusson [Sat, 3 Sep 2011 10:23:22 +0000 (12:23 +0200)]
Fix typo in configure.ac, noticed by hwoarang
Dana Jansens [Wed, 5 Oct 2011 17:25:46 +0000 (13:25 -0400)]
Consistency with helper/modal windows and multiple desktops.
When focusing a window, bring its helper windows. This happened before when
switching its desktop, but if you have 2 windows on different desktops and
switch between them, the helpers should come to both when they are being used.
When a new helper/modal window maps on a different desktop and you are using
the application, then the helper/modal window is moved to the current desktop
to be with the application you are using.
Dana Jansens [Tue, 4 Oct 2011 21:53:54 +0000 (17:53 -0400)]
Fix focus stealing for changing desktops/Use timestamp for user input events
Change the logic for when to allow stealing focus across desktops.
- It was possible to call event_time_after() with a CurrentTime in the old code.
- It would disallow a user requested change which is crazy.
- It would change desktops on you when a new window appeared but this is
generally not desirable.
event_source_time() is supposed to give the time which the user made things
happen. we leave it at 0 for user-input events right now which means stuff like
changing desktop doesn't save any timestamp at all. we should use the
timestamp from x for user-generated events.
Mikael Magnusson [Wed, 3 Aug 2011 21:01:28 +0000 (23:01 +0200)]
Fix a memleak introduced by
0dd91ba0e2382a8f6177f501f8a0b26e0daf26a8, some cleanups
Dana Jansens [Tue, 25 Jan 2011 17:02:42 +0000 (12:02 -0500)]
be a bit more explicit about what is being copied from one texture to another
Carlos Pita [Wed, 12 Jan 2011 23:49:45 +0000 (20:49 -0300)]
Separate theme options for osd prompt buttons.
I managed to keep backwards compatibility without really cluttering
the code so here is the patch
http://bugzilla.icculus.org/show_bug.cgi?id=4874 too.
Please keep in mind that this is my first piece of code for openbox
and that I'm not a die hard openbox user (yet), not to tell the patch
was not exhaustively tested. Anyway I think it's pretty much in a good
shape but any criticism will be welcome.
Basically the patch add the following theme options for controlling
buttons in osd prompts:
%%%% colors
%
% for the text inside the button
osd.button.unpressed.text.color
osd.button.pressed.text.color
osd.button.focused.text.color
%
% for the line art around the button
% (if you don't wan't the box just make box.color = bg.color)
osd.button.pressed.box.color
osd.button.focused.box.color
%%%% textures
%
osd.button.unpressed.bg
osd.button.pressed.bg
osd.button.focused.bg
The buttons can be in three states:
unpressed: neither clicked nor selected
focused: selected but not clicked
pressed: clicked (and of course selected)
I discarded the previous distinction between press and pfocus as in
fact it was only a formal distinction, in that both appearances
mimicked each other in every sense. It think that it was just
inherited from the way titlebar buttons are managed so I decided to
simplify it a bit.
All the options default in a way that preserves backwards compatibility:
osd.button.unpressed.text.color -> osd.active.label.text.color
osd.button.pressed.text.color -> osd.active.label.text.color
osd.button.focused.text.color -> osd.active.label.text.color
osd.button.pressed.box.color -> window.active.button.pressed.image.color
osd.button.focused.box.color -> window.active.button.hover.image.color
osd.button.unpressed.bg -> window.active.button.unpressed.bg
osd.button.pressed.bg -> window.active.button.pressed.bg
osd.button.focused.bg -> window.active.button.hover.bg
Notice that a good deal of locs where added to theme.c but in
compensation prompt.c is pretty much simpler now because the
appearances and textures are created while loading the theme.
Mikael Magnusson [Tue, 2 Aug 2011 20:18:14 +0000 (22:18 +0200)]
Merge branch 'm4/master'
Mikael Magnusson [Tue, 2 Aug 2011 20:17:11 +0000 (22:17 +0200)]
Pedro Beja [Sat, 24 Apr 2010 20:21:23 +0000 (22:21 +0200)]
Update portuguese translation
Mikael Magnusson [Thu, 22 Apr 2010 13:55:13 +0000 (15:55 +0200)]
Update estonian translation
Mikael Magnusson [Sat, 13 Mar 2010 20:57:58 +0000 (21:57 +0100)]
Add Plural-Forms header to fi.po and remove fuzzy mark.
Jakub Łojewski [Thu, 11 Mar 2010 13:29:41 +0000 (14:29 +0100)]
Update polish translation.