Compare commits

...

120 Commits

Author SHA1 Message Date
Carlos Garnacho
052e8cc8e2 frame: disallow frame operations if the popup is open
If some device has a popped up menu, meta_frame_get_flags()
returns 0 to indicate other devices cannot trigger any
actions on the frame.
2012-11-03 19:47:37 -04:00
Carlos Garnacho
827999aa82 ui: Add a MetaDevice arg to meta_window_menu_popup()
This will be the device popping up the menu, gtk_menu_popup()
uses the current GTK+ event device, and that might not even be
filled up with mutter event bypassing.
2012-11-03 19:47:37 -04:00
Carlos Garnacho
54a58bd9b8 window: Make MetaWindow keep a pointer to the popup menu
Multiple windows may now have different popup menus, responding
only to the device pair that popped it up.
2012-11-03 19:47:37 -04:00
Carlos Garnacho
dc29985b80 ui: enable multidevice on frame windows
This is so different pointers may have different
cursors on them.
2012-11-03 19:47:37 -04:00
Carlos Garnacho
acbd4bf599 frames: Use the triggering device when updating controls 2012-11-03 19:47:37 -04:00
Carlos Garnacho
b742d1bc64 frames: Get coordinates from event
Don't spare a synchronous X call, instead translate
properly the XEvent coordinates in ui.c and use
the event coordinates in MetaFrames
2012-11-03 19:47:37 -04:00
Carlos Garnacho
ae1290e3b4 display: Make focus info persistent
It must not be freed (at least meanwhile the device pair
exists), so ensure it's kept around, and we don't create
info for a same keyboard twice.
2012-11-03 19:47:37 -04:00
Carlos Garnacho
8037cc5ec4 window: make guess_grab_pointer() more reliable
Now either the current focus keyboard or the client pointer
(i.e. the pointer paired to the last keyboard that had the
window focus) are used to guess the pointer that should be
grabbed.
2012-11-03 19:47:36 -04:00
Carlos Garnacho
275ab901b0 window: set the corresponding client pointer on focused windows.
The client window determines the device pair that is used for
core protocol calls such as XQueryPointer(), so different
clients using the core protocol can be focused by different
devices simultaneously.
2012-11-03 19:47:36 -04:00
Carlos Garnacho
b3a9d1b39a core: enable XInput2 by default
This is nothing but the beginning, things work with a single
pointer/keyboard pair, but will be largely broken with multiple
devices interacting simultaneously, so we first need a policy
to establish a sensible behavior for extra pointer/keyboard
pairs.

the MUTTER_USE_CORE_DEVICES envvar has been added to force use
of Xlib core events for devices in order to check for regressions.
2012-11-03 19:47:36 -04:00
Carlos Garnacho
ac187476ae xi2: Workaround some bugs in XI2 passive grabs
XIAllMasterDevices doesn't quite work for key grabs, so only do
this at the moment for the Virtual Core Keyboard
2012-11-03 19:47:36 -04:00
Carlos Garnacho
f512da8c47 display: Ignore events from slave devices
Mutter only handles master devices.
2012-11-03 19:47:36 -04:00
Carlos Garnacho
2b47bffbee compositor: use meta_device_grab() for pointer/keyboard grabs
These happen invariably on the VCP/VCK pair.
2012-11-03 19:47:36 -04:00
Carlos Garnacho
8da5a01c92 screen: Use meta_device_pointer_set_window_cursor() for startup sequence.
At the moment feedback is only provided for the Virtual Core Pointer
2012-11-03 19:47:36 -04:00
Carlos Garnacho
25dc04440b device-map: Add meta_device_map_list_devices()
This function returns a list of the devices currently handled by
the device map.
2012-11-03 19:47:36 -04:00
Carlos Garnacho
7138cc7ea4 core: Make frame handle per-pointer cursors. 2012-11-03 19:47:36 -04:00
Carlos Garnacho
04cbdb4e23 workspace: use triggering device to focus the default window on workspace switch 2012-11-03 19:47:36 -04:00
Carlos Garnacho
e138726ded screen: make "monitor under pointer" logic work for several devices 2012-11-03 19:47:36 -04:00
Carlos Garnacho
84dfc98636 window: query the guessed pointer's modifiers on _NET_WM_MOVERESIZE 2012-11-03 19:47:36 -04:00
Carlos Garnacho
95247457ef display: Use the grab pointer for delayed window raising 2012-11-03 19:47:35 -04:00
Carlos Garnacho
9b1b7b71e2 keybindings: use the right device for querying the modifier mask. 2012-11-03 19:47:35 -04:00
Carlos Garnacho
4facab385d devices: make meta_device_pointer_query_position() return a boolean
like in XQueryPointer/XIQueryPointer, the return value tells whether
the pointer device is on the same screen than the passed window.
2012-11-03 19:47:35 -04:00
Jasper St. Pierre
cc6dba2113 display: Update mouse mode focus code for XI2 2012-11-03 19:47:35 -04:00
Carlos Garnacho
5f6f67fb4e core: Make keyboard focus handling happen per-keyboard
MetaFocusInfo is a struct holding all necessary info, code has
been updated to use the per-keyboard focus info instead of the
old fields.
2012-11-03 19:47:35 -04:00
Carlos Garnacho
0d97e6adeb core: Add meta_device_keyboard_[gs]et_focus_window()
These functions are meant to replace X[GS]etInputFocus() calls across
the core.
2012-11-03 19:47:35 -04:00
Carlos Garnacho
991fdeb9dd display: Use meta_device_grab() for pointer active grabs. 2012-11-03 19:47:35 -04:00
Carlos Garnacho
df908e5256 keybindings: Use meta_device_grab() for keyboard active grabs 2012-11-03 19:47:35 -04:00
Carlos Garnacho
4b88c1c72a window: Use meta_device_pointer_warp() 2012-11-03 19:47:35 -04:00
Carlos Garnacho
33d4732bde core: Keep track of per pointer/keyboard grabs
There is now a MetaGrabInfo struct, holding all information about
an ongoing grab, there were unfortunately no means of making this
commit smaller, as things are too intertwined to separate it,

On places where it was most obvious, the correct device has been
used (in reaction to events, for example), in other parts, the
private API has been extended to include the MetaDevice (or device
ID for core.h functions), in other places, the virtual core
pointer/keyboard are used out of cluelessness.
2012-11-03 19:47:35 -04:00
Carlos Garnacho
2bbd82ba51 ui: Use input-events.h to translate XEvents to GdkEvents
This is the only use in the UI part of core functions not
exported via core.h, but this is sort of a hack within a hack,
and still better than doing the XInput2 vs core dance again.
2012-11-03 19:47:35 -04:00
Carlos Garnacho
13acafabe2 devices: Make MetaDevice/MetaDeviceMap partly public
MetaDevice is quite limited outside of the core, mostly useful
to represent a device, and get the paired one.
2012-11-03 19:47:34 -04:00
Carlos Garnacho
20537b9bb0 keybindings: Replace XGrabKey() with meta_device_map_grab_key() 2012-11-03 19:47:34 -04:00
Carlos Garnacho
373ef2e6f1 display: Replace XGrabButton with meta_device_map_grab_button() 2012-11-03 19:47:34 -04:00
Carlos Garnacho
93c7a22161 core: Add XInput2 device map implementation 2012-11-03 19:47:34 -04:00
Carlos Garnacho
9f06372e17 Replace XAllowEvents with meta_device_allow_events() 2012-11-03 19:37:53 -04:00
Carlos Garnacho
b3ecd268f6 Use meta_core_select_events() for input events 2012-11-03 19:37:52 -04:00
Carlos Garnacho
c32ee410e9 core: Add method to select events on a window
This function handles XInput2 vs core in input events.
2012-11-03 19:37:52 -04:00
Carlos Garnacho
3584f38d08 devices-xi2: Export function to translate event mask 2012-11-03 19:37:52 -04:00
Carlos Garnacho
712d2feb73 Add XInput2 input devices implementation 2012-11-03 19:37:52 -04:00
Carlos Garnacho
7b21bd8c6f window: use input event helper functions in grab operations. 2012-11-03 19:37:52 -04:00
Carlos Garnacho
c7c1053ade input-events: Add method to get the device for an event 2012-11-03 19:37:52 -04:00
Carlos Garnacho
d7bd7c9a40 core: Add device map object
It will contain the input devices available
2012-11-03 19:37:52 -04:00
Carlos Garnacho
96cdedf569 core: Add core devices implementation 2012-11-03 19:37:52 -04:00
Carlos Garnacho
8865578933 device: Add methods to pair devices 2012-11-03 19:37:52 -04:00
Carlos Garnacho
1a29f2cd0f Add pointer/keyboard abstract classes 2012-11-03 19:37:52 -04:00
Carlos Garnacho
324d9fdb14 compositor: Use helper functions for input events 2012-11-03 19:37:52 -04:00
Carlos Garnacho
190037cd72 keybindings: Use input event helper functions 2012-11-03 19:37:52 -04:00
Carlos Garnacho
a3ca52bf0f window: use input event helper functions on notify_focus() 2012-11-03 19:37:51 -04:00
Carlos Garnacho
29b5fd7fd7 display: get crossing/focus events details via helper functions 2012-11-03 19:37:51 -04:00
Carlos Garnacho
7a3d49b88e display: get button event coordinates with the helper functions 2012-11-03 19:37:51 -04:00
Carlos Garnacho
3e3ad71a68 display: get button events state from helper functions 2012-11-03 19:37:51 -04:00
Carlos Garnacho
1c3b695848 display: get button number from helper input event function 2012-11-03 19:37:51 -04:00
Carlos Garnacho
e1379441d4 display: Use helper function to get input events' timestamp 2012-11-03 19:37:51 -04:00
Carlos Garnacho
d75f43f504 display: Use helper functions for getting window/root in input events 2012-11-03 19:37:51 -04:00
Carlos Garnacho
de6dceb3ac display: Get the right window/time for input events 2012-11-03 19:37:51 -04:00
Carlos Garnacho
03ddc0cd94 display: separate input/non-input events handling in the event callback
We now use meta_input_event_get_type() to discern input events from the
others. This commit has involved plenty of indenting changes, so it's
better seen with git diff -b.
2012-11-03 19:37:51 -04:00
Carlos Garnacho
f440af2c02 core: Add helper code to handle input events
These will be used with every input event out there so they're
dealt with uniformly.
2012-11-03 19:37:51 -04:00
Carlos Garnacho
8b3ef16460 display: Add XInput2 variables in private struct 2012-11-03 19:37:51 -04:00
Carlos Garnacho
7d587770f3 configure: Check for XInput2 2012-11-03 19:37:51 -04:00
Jasper St. Pierre
188d532438 display: Ignore DamageNotify in spew 2012-11-03 19:37:51 -04:00
Owen W. Taylor
f258556cec MetaPluginManager: don't send events to Clutter twice
When support for multiple plugins was removed, the logic that was
supposed to send events to Clutter directly *only if there is no filter
function from a plugin* was broken, so events were being sent to
Clutter twice if Clutter didn't consume them the first time.

https://bugzilla.gnome.org/show_bug.cgi?id=686406
2012-11-03 19:36:41 -04:00
Jasper St. Pierre
62dbaa89ca mutter: Don't call g_type_init
It has been deprecated upstream.
2012-11-02 11:45:11 -04:00
Tobias Endrigkeit
b56396eca5 Updated German translation 2012-10-30 18:59:33 +01:00
Rafael Ferreira
0fdc36cac4 Updated Brazilian Portuguese Translation 2012-10-29 16:29:49 -02:00
Florian Müllner
2cc0d31b17 window: Avoid spurious focus-window changes when showing desktop
When using the show-desktop shortcut with no desktop window, unshowing
will focus the second-most-recently-used window. If we find a desktop
window, it will be focused explicitly and everything works as expected;
however without a desktop window, we end up hiding the focus window,
which will use focus_default_window() with the not_this_one parameter
to move focus away. We used to get away with this, as the not_this_one
parameter was ignored until commit e257580b94, now with bug 675982
fixed, we need to explicitly handle the show-desktop case.

https://bugzilla.gnome.org/show_bug.cgi?id=686928
2012-10-26 15:52:32 +02:00
Florian Müllner
e2bf91cd61 Bump version to 3.7.1
Update NEWS
2012-10-23 14:50:37 +02:00
Mattias Põldaru
294311b2d1 [l10n] Updated Estonian translation 2012-10-22 22:02:58 +03:00
Kjartan Maraas
db6d89b742 Updated Norwegian bokmål translation 2012-10-22 19:52:14 +02:00
Florian Müllner
2717a02a8d screen: Ignore num-workspaces when using dynamic workspaces
On startup, workspaces are initialized according to the num-workspaces
preference. However when using dynamic workspaces, the actual number
of workspaces in use might be greater than the preference (when
replacing the window manager), forcing windows on those workspaces
to the first workspace.
To fix, ignore the preference completely when using dynamic workspaces
and try to restore the previous number of workspaces (as read from
_NET_NUMBER_OF_DESKTOPS).

https://bugzilla.gnome.org/show_bug.cgi?id=685439
2012-10-17 22:43:26 +02:00
Мирослав Николић
4344c9e192 Updated Serbian translation 2012-10-17 10:11:38 +02:00
Marek Černocký
53e2d34628 Updated Czech translation 2012-10-17 08:27:39 +02:00
Andika Triwidada
c602d53649 Updated Indonesian translation 2012-10-16 23:42:05 +07:00
Daniel Mustieles
43a121c8d9 Updated Spanish translation 2012-10-16 18:12:08 +02:00
Fran Diéguez
a8c5100fbb Updated Galician translations 2012-10-16 17:06:40 +02:00
Matej Urbančič
5034bd8a7e Updated Slovenian translation 2012-10-16 15:33:58 +02:00
Florian Müllner
07d8b9ce19 Revert "delete: Unbreak string freeze"
This reverts commit 09713c5fd4.

https://bugzilla.gnome.org/show_bug.cgi?id=684306
2012-10-16 14:47:37 +02:00
Florian Müllner
9c5ac65311 Bump version to 3.6.1
Update NEWS
2012-10-15 23:26:37 +02:00
Carles Ferrando
ce8d36a5db [l10n] Updated Catalan (Valencian) translation 2012-10-15 22:39:12 +02:00
Gil Forcada
27b00d6f63 [l10n] Updated Catalan translation 2012-10-15 22:39:04 +02:00
Alexandre Franke
c441364bd3 Update French translation 2012-10-15 21:26:41 +02:00
Jürg Billeter
1a521e10c3 display: Only manage the default X screen
https://bugzilla.gnome.org/show_bug.cgi?id=648156
2012-10-15 19:18:45 +02:00
Theppitak Karoonboonyanan
e22d941f06 Updated Thai translation 2012-10-15 15:16:47 +07:00
Sayak Sarkar
787d22dcd0 Updated Bengali India Translations 2012-10-15 12:30:04 +05:30
Sandeep Sheshrao Shedmake
22d9182322 Updated Marathi Translations 2012-10-15 11:16:55 +05:30
Ask H. Larsen
38295e8202 Updated Danish translation 2012-10-15 06:38:57 +02:00
Shankar Prasad
fe57f7572d Updated Kannada Translations 2012-10-14 23:58:42 +05:30
Shankar Prasad
aade16a9eb Updated Kannada Translations 2012-10-14 23:57:16 +05:30
Alexander Shopov
e31a97759e Updated Bulgarian translation 2012-10-14 17:31:48 +03:00
Benjamin Berg
472662d099 Resize the guard window when the X screen is resized.
Fixes bug #670396. Without this fix the guard window may not
extend over the whole area of the screen after a XRandR
reconfiguration. The effect being that mouse events are
delivered to invisible windows.
2012-10-14 12:16:06 +02:00
Aurimas Černius
027f16b096 Updated Lithuanian translation 2012-10-13 22:55:26 +03:00
Ihar Hrachyshka
5c7fdd67e8 Updated Belarusian translation. 2012-10-13 17:44:15 +03:00
Kjartan Maraas
4a0b6793bf Updated Norwegian bokmål translation 2012-10-13 12:51:20 +02:00
Daniel Mustieles
228d1bf9aa Updated Spanish translation 2012-10-13 12:28:33 +02:00
Changwoo Ryu
85bcb9c121 Updated Korean translation 2012-10-13 18:54:53 +09:00
Yuri Myasoedov
989a38767e Updated Russian translation 2012-10-13 13:41:26 +04:00
Tom Tryfonidis
78e72f0a47 Updated Greek translation 2012-10-13 01:00:45 +03:00
Rūdolfs Mazurs
0faa623043 Updated Latvian translation 2012-10-12 22:31:27 +03:00
Chris Leonard
ecd7e662ff Updated British English translation 2012-10-12 18:55:36 +01:00
Piotr Drąg
7d9925ba2e Updated Polish translation 2012-10-12 19:06:59 +02:00
Fran Diéguez
95c6547631 Updated Galician translations 2012-10-11 22:02:10 +02:00
Matej Urbančič
b5235d5a46 Updated Slovenian translation 2012-10-11 19:56:53 +02:00
Andika Triwidada
f3b1e8b3bd Updated Indonesian translation 2012-10-11 21:45:31 +07:00
Florian Müllner
59bc5b7975 display: (Optionally) delay focus changes in focus-follows-mouse mode
Moving focus immediately on crossing events as we currently do
in focus-follows-mouse mode may trigger a lot of unwanted focus
changes when moving over unrelated windows on the way to a target.
Those accidental focus changes prevent features like GNOME Shell's
application menu from working properly and are visually expensive
since we now use a very distinct style for unfocused windows.
Instead, delay the actual focus change until the pointer has stopped
moving.

https://bugzilla.gnome.org/show_bug.cgi?id=678169
2012-10-11 07:49:21 +02:00
Evan Broder
99cbe762d7 Expose MetaPlugin to introspection
Add a type annotation on the xevent_filter vfunc. This is sufficient
to remove the skip annotation on MetaPlugin and MetaPluginClass
without triggering scan errors.

https://bugzilla.gnome.org/show_bug.cgi?id=671098
2012-10-08 17:05:11 -04:00
Jasper St. Pierre
7a2c019514 window: Don't move the desktop window after monitor hotplug
If someone plugs in a new monitor, while all their regular windows
should move in absolute X coordinates to ensure they stay on the
same monitor, the desktop window should stay put.

https://bugzilla.gnome.org/show_bug.cgi?id=681159
2012-10-07 13:23:04 -03:00
Owen W. Taylor
c02e1b6f56 Remove unused public window-property functions
Simplify the set of window-property functions to remove the
unused functions:

 meta_window_reload_properties_from_xwindow()
 meta_window_reload_properties()

And to make:

 meta_window_reload_property()

static. The code is considerably simplified by removing the
plural variants.

https://bugzilla.gnome.org/show_bug.cgi?id=587255
2012-10-03 23:35:35 -04:00
Jasper St. Pierre
7938458eb8 window-actor: Don't create a mask texture unnecessarily
Mask texture resources may be expensive. Don't create one
if we don't need to, like on an unshaped window without
a frame.

https://bugzilla.gnome.org/show_bug.cgi?id=681676
2012-09-26 13:53:14 -03:00
Florian Müllner
165e117028 Bump version to 3.6.0
Update NEWS
2012-09-24 22:41:08 +02:00
Mattias Põldaru
32cb4a178e [l10n] Updated Estonian translation 2012-09-24 10:56:42 +03:00
Timo Jyrinki
7b69780d9a Finnish translation update by Jiri Grönroos 2012-09-24 09:29:55 +03:00
Noriko Mizumoto
be500e33f9 [l10n] Update Japanese translation 2012-09-24 12:55:14 +09:00
Ihar Hrachyshka
427c5cc42b Updated Belarusian translation. 2012-09-23 13:28:13 +03:00
Sweta Kothari
3f444cb2fe Updated gujarati file 2012-09-22 23:34:54 +05:30
Rūdolfs Mazurs
02bc4b54eb Updated Latvian translation 2012-09-22 18:59:21 +03:00
Ani Peter
85c46be205 Updated Malayalam file 2012-09-22 01:42:33 +05:30
Krishnababu Krothapalli
f97db0215b Updated Telugu Translations 2012-09-21 22:29:46 +05:30
Rajesh Ranjan
dc79d8aa3d hindi update 2012-09-21 17:09:18 +05:30
Rajesh Ranjan
00fecb6cea hindi update 2012-09-21 17:04:11 +05:30
Daniel Korostil
f0e97b540f Uploaded Ukranian 2012-09-21 10:05:23 +03:00
Alexander Shopov
37266aabfe Updated Bulgarian translation 2012-09-19 20:36:13 +03:00
106 changed files with 14727 additions and 10583 deletions

44
NEWS
View File

@@ -1,3 +1,47 @@
3.7.1
=====
* screen: Ignore num-workspaces when using dynamic workspaces [Florian; #685439]
Contributors:
Florian Müllner
Translations:
Mattias Põldaru [et], Kjartan Maraas [nb], Мирослав Николић [sr, sr@latin],
Marek Černocký [cs], Andika Triwidada [id], Daniel Mustieles [es],
Fran Diéguez [gl], Matej Urbančič [sl]
3.6.1
=====
* Fix crash when opening large popup menus [Jasper; #681676]
* window: Don't move the desktop window after monitor hotplug [Jasper; #681159]
* Expose MetaPlugin to introspection [Evan; #671098]
* Optionally delay focus changes in focus-follows-mouse mode [Florian; #678169]
* Resize the guard window when the X screen is resized [Benjamin; #670396]
* display: Only manage the default X screen [Jürg; #648156]
* Misc cleanups: [Owen; #587255]
Contributors:
Benjamin Berg, Jürg Billeter, Evan Broder, Florian Müllner, Jasper St. Pierre,
Owen Taylor
Translations:
Alexandre Franke [fr], Theppitak Karoonboonyanan [th], Sayak Sarkar [bn_IN],
Sandeep Sheshrao Shedmake [mr], Ask H. Larsen [da], Shankar Prasad [kn],
Alexander Shopov [bg], Aurimas Černius [lt], Ihar Hrachyshka [be],
Kjartan Maraas [nb], Daniel Mustieles [es], Changwoo Ryu [ko],
Yuri Myasoedov [ru], Tom Tryfonidis [el], Rūdolfs Mazurs [lv],
Chris Leonard [en_GB], Piotr Drąg [pl], Fran Diéguez [gl], Gil Forcada [ca],
Matej Urbančič [sl], Andika Triwidada [id], Carles Ferrando [ca]
3.6.0
=====
Translations:
Alexander Shopov [bg], Daniel Korostil [uk], Rajesh Ranjan [hi],
Krishnababu Krothapalli [te], Ani Peter [ml], Rūdolfs Mazurs [lv],
Sweta Kothari [gu], Ihar Hrachyshka [be], Noriko Mizumoto [ja],
Timo Jyrinki [fi], Mattias Põldaru [et]
3.5.92
======
* screen: Allow NULL out arguments in meta_screen_get_size [Tomeu]

View File

@@ -1,8 +1,8 @@
AC_PREREQ(2.50)
m4_define([mutter_major_version], [3])
m4_define([mutter_minor_version], [5])
m4_define([mutter_micro_version], [92])
m4_define([mutter_minor_version], [7])
m4_define([mutter_micro_version], [1])
m4_define([mutter_version],
[mutter_major_version.mutter_minor_version.mutter_micro_version])
@@ -199,6 +199,33 @@ if test x$have_xcursor = xyes; then
AC_DEFINE(HAVE_XCURSOR, , [Building with Xcursor support])
fi
XINPUT2_VERSION=1.4.0
AC_ARG_ENABLE(xinput2,
AC_HELP_STRING([--disable-xinput2],
[disable XInput2 usage]),,
enable_xinput2=yes)
if test x$enable_xinput2 = xyes; then
AC_MSG_CHECKING([XInput2])
if $PKG_CONFIG --atleast-version $XINPUT2_VERSION xi; then
have_xinput2=yes
else
have_xinput2=no
fi
AC_MSG_RESULT($have_xinput2)
else
have_xinput2=no
fi
if test x$have_xinput2 = xyes; then
echo "Building with XInput2"
MUTTER_PC_MODULES="$MUTTER_PC_MODULES xi"
AC_DEFINE(HAVE_XINPUT2, , [Building with XInput2 support])
fi
AM_CONDITIONAL(HAVE_XINPUT2, test "$have_xinput2" = "yes")
PKG_CHECK_MODULES(MUTTER, $MUTTER_PC_MODULES)
# This is used for plugins
@@ -468,6 +495,7 @@ mutter-$VERSION
Shape extension: ${found_shape}
Xsync: ${found_xsync}
Xcursor: ${have_xcursor}
XInput2: ${have_xinput2}
"

126
po/be.po
View File

@@ -4,8 +4,8 @@ msgstr ""
"Project-Id-Version: mutter.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-07-15 00:47+0000\n"
"PO-Revision-Date: 2012-07-15 11:34+0300\n"
"POT-Creation-Date: 2012-10-11 14:32+0000\n"
"PO-Revision-Date: 2012-10-13 17:44+0300\n"
"Last-Translator: Ігар Грачышка <ihar.hrachyshka@gmail.com>\n"
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
"Language: be\n"
@@ -47,42 +47,42 @@ msgstr "Падзея з сігналам"
msgid "Unknown window information request: %d"
msgstr "Невядомы запыт інфармацыі пра акно: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:113
#, c-format
msgid "%s is not responding."
msgstr "%s не адказвае на запыты."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:117
msgid "Application is not responding."
msgstr "Праграма не адказвае на запыты."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:122
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Вы можаце альбо крыху пачакаць адказу, альбо змусіць праграму да выхаду."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Wait"
msgstr "_Пачакаць"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Force Quit"
msgstr "_Змусіць да выхаду"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr ""
"Адсутнічае пашырэнне \"%s\", патрэбнае для ажыццяўлення кампазітнага вываду"
#: ../src/core/display.c:446
#: ../src/core/display.c:492
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Не ўдалося адкрыць X-дысплей аконнай сістэмы \"%s\"\n"
#: ../src/core/keybindings.c:844
#: ../src/core/keybindings.c:853
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@@ -152,7 +152,7 @@ msgstr "Вывесці нумар версіі праграмы"
msgid "Mutter plugin to use"
msgstr "Патрэбны плугін Mutter"
#: ../src/core/prefs.c:1065
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -160,12 +160,12 @@ msgstr ""
"Асаблівыя паводзіны для некаторых хібных праграм выключаныя. Некаторыя "
"праграмы могуць перастаць працаваць, як мае быць.\n"
#: ../src/core/prefs.c:1140
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Не ўдалося разабраць азначэнне шрыфту \"%s\" з GSettings-ключа %s\n"
#: ../src/core/prefs.c:1206
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -174,7 +174,7 @@ msgstr ""
"Значэнне \"%s\", знойдзенае ў базе канфігурацыйных даных, не азначае "
"мадыфікатар мышынай кнопкі\n"
#: ../src/core/prefs.c:1724
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -183,7 +183,7 @@ msgstr ""
"Значэнне \"%s\", знойдзенае ў базе канфігурацыйных даных, не азначае "
"клавіятурны скарот \"%s\"\n"
#: ../src/core/prefs.c:1821
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Прастора працы %d"
@@ -340,22 +340,22 @@ msgstr ""
"памеру, але разам з гэтым прызначыла для сябе мінімальны памер %d x %d і "
"максімальны памер %d x %d. Такія паводзіны не маюць сэнсу.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Праграма прызначыла памылковае значэнне _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (на %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Для %2$s вызначана хібнае акно WM_TRANSIENT_FOR 0x%1$lx.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR акно 0x%lx для %s стварыла б цыкл.\n"
@@ -404,6 +404,10 @@ msgid ""
"\"Windows key\" on PC hardware. It's expected that this binding either the "
"default or set to the empty string."
msgstr ""
"Гэта клавіша запусціць \"перакрыццё\", якое прадстаўляе спалучэнне агляду "
"вокнаў і сістэму запуску праграм. Прадвызначаная клавіша для гэтай аперацыі "
"- гэта клавіша \"Windows\" на PC-камп'ютары. Чакаецца, што гэты скарот будзе "
"або прадвызначаным значэннем, або пустым тэкставым ланцужком."
#: ../src/org.gnome.mutter.gschema.xml.in.h:3
msgid "Attach modal dialogs"
@@ -415,10 +419,13 @@ msgid ""
"attached to the titlebar of the parent window and are moved together with "
"the parent window."
msgstr ""
"Калі ўключана, замест незалежных загалоўных стужак мадальныя дыялогавыя "
"акенцы будуць прычэплівацца да загалоўных стужак галоўных вокнаў і "
"перасоўвацца разам з імі."
#: ../src/org.gnome.mutter.gschema.xml.in.h:5
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
msgstr "Уключыць кафляванне пры перацягванні вокнаў на бераг экрана"
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
msgid ""
@@ -426,10 +433,14 @@ msgid ""
"vertically and resizes them horizontally to cover half of the available "
"area. Dropping windows on the top screen edge maximizes them completely."
msgstr ""
"Калі ўключана, перацягванне вокнаў на вертыкальныя берагі экрана "
"максімалізуе іх па вертыкалі і змяняе памер па гарызанталі, каб тыя "
"закрывалі палову наяўнага месца. Перацягванне вокнаў на верхні бераг экрана "
"максімалізуе іх ва ўсіх накірунках."
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
msgid "Workspaces are managed dynamically"
msgstr ""
msgstr "Дынамічнае кіраванне прасторамі працы"
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
msgid ""
@@ -437,6 +448,9 @@ msgid ""
"static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)."
msgstr ""
"Вызначае, ці трэба дынамічна кіраваць колькасцю прастор працы, або трэба "
"проста ўжыць іх нязменную колькасць (канкрэтнае значэнне вызначаецца ключом "
"num-workspaces у org.gnome.desktop.wm.preferences)."
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
msgid "Workspaces only on primary"
@@ -459,22 +473,40 @@ msgid ""
"Determines whether the use of popup and highlight frame should be disabled "
"for window cycling."
msgstr ""
"Вызначае, ці трэба выключыць выплыўную рамку з падсветкай для пракручвання "
"спіса вокнаў."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Затрымліваць змяненне фокусу да спынення паказальніка мышы"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Калі ўключана, а рэжым фокусу ці \"sloppy\", ці \"mouse\", тады фокус не "
"будзе пераключацца паміж вокнамі імгненна, але толькі пасля спынення "
"паказальніка мышы."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Шырыня аблямоўкі для перацягвання"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
msgstr ""
"Памер аблямоўкі для перацягвання. Калі бачная аблямоўка матыва недастаткова, "
"будуць дададзена дадатковая нябачная рамка, каб задаволіць гэту настройку."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Выбраць акно з выплыўнога акенца"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Закрыць выплыўное акенца"
@@ -1560,49 +1592,3 @@ msgstr "Y-значэнне было %d, а чакалася %d"
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr ""
"%d каардынатных выразаў разабраныя за %g секунд (у сярэднім %g секунд)\n"
#~ msgid "Comma-separated list of compositor plugins"
#~ msgstr "Спіс плугінаў кампазітнага вываду, падзеленых коскамі"
#~ msgid "Live Hidden Windows"
#~ msgstr "Дзейныя схаваныя вокны"
#~ msgid ""
#~ "Determines whether hidden windows (i.e., minimized windows and windows on "
#~ "other workspaces than the current one) should be kept alive."
#~ msgstr ""
#~ "Вызначае, ці трэба захоўваць дзейнымі схаваныя вокны (напрыклад, "
#~ "мінімалізаваныя або вокны з іншых прастор працы)."
#~ msgid "Close Window"
#~ msgstr "Закрыць акно"
#~ msgid "Window Menu"
#~ msgstr "Меню акна"
#~ msgid "Minimize Window"
#~ msgstr "Мінімалізаваць акно"
#~ msgid "Maximize Window"
#~ msgstr "Максімалізаваць акно"
#~ msgid "Restore Window"
#~ msgstr "Аднавіць былы памер акна"
#~ msgid "Roll Up Window"
#~ msgstr "Скруціць акно ў загаловак"
#~ msgid "Unroll Window"
#~ msgstr "Раскруціць акно з загалоўка"
#~ msgid "Keep Window On Top"
#~ msgstr "Трымаць акно над астатнімі"
#~ msgid "Remove Window From Top"
#~ msgstr "Прыбраць акно з верху"
#~ msgid "Always On Visible Workspace"
#~ msgstr "Заўсёды на бачнай прасторы працы"
#~ msgid "Put Window On Only One Workspace"
#~ msgstr "Змясціць акно на адзінай прасторы працы"

View File

@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-07-04 07:13+0300\n"
"PO-Revision-Date: 2012-07-04 07:12+0300\n"
"POT-Creation-Date: 2012-10-14 17:31+0300\n"
"PO-Revision-Date: 2012-10-14 17:31+0300\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
"Language: bg\n"
@@ -51,16 +51,16 @@ msgstr "Събитие за звънец"
msgid "Unknown window information request: %d"
msgstr "Неизвестна заявка за информация за прозорец: %d"
#: ../src/core/delete.c:111
#: ../src/core/delete.c:113
#, c-format
msgid "<tt>%s</tt> is not responding."
msgstr "<tt>%s</tt> не отговаря на съобщенията."
msgid "%s is not responding."
msgstr "%s не отговаря на съобщенията."
#: ../src/core/delete.c:114
#: ../src/core/delete.c:117
msgid "Application is not responding."
msgstr "Програмата не отговаря на съобщенията."
#: ../src/core/delete.c:119
#: ../src/core/delete.c:122
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@@ -68,25 +68,25 @@ msgstr ""
"Можете да изчакате малко преди изрично да накарате приложението да спре "
"работата си."
#: ../src/core/delete.c:126
#: ../src/core/delete.c:129
msgid "_Wait"
msgstr "Из_чакване"
#: ../src/core/delete.c:126
#: ../src/core/delete.c:129
msgid "_Force Quit"
msgstr "_Принудително спиране"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Липсва разширението „%s“, необходимо за наслагване"
#: ../src/core/display.c:446
#: ../src/core/display.c:492
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Неуспех при отварянето на дисплея на X Window „%s“\n"
#: ../src/core/keybindings.c:852
#: ../src/core/keybindings.c:853
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@@ -156,7 +156,7 @@ msgstr "Отпечатване на версията на програмата"
msgid "Mutter plugin to use"
msgstr "Приставка, която да се ползва"
#: ../src/core/prefs.c:1065
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -164,14 +164,14 @@ msgstr ""
"Триковете за развалените програми са изключени. Някои програми могат да са с "
"неправилно поведение.\n"
#: ../src/core/prefs.c:1140
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr ""
"Описанието на шрифт „%s“ от ключа на GSettings — %s, не може да бъде "
"анализирано\n"
#: ../src/core/prefs.c:1206
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -180,7 +180,7 @@ msgstr ""
"„%s“, който е открит в базата от данни с настройките, не е валиден "
"модификатор на бутон на мишката\n"
#: ../src/core/prefs.c:1724
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -189,7 +189,7 @@ msgstr ""
"Низът „%s“ открит в базата от данни с настройки е невалиден за стойност на "
"клавишната комбинация „%s“\n"
#: ../src/core/prefs.c:1821
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Работен плот %d"
@@ -345,22 +345,22 @@ msgstr ""
"променя, но едновременно с това указва минимален размер %d x %d и максимален "
"размер %d x %d. Това не е смислено.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Приложението зададе неверен _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (от %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "За %2$s е указан неправилен WM_TRANSIENT_FOR, прозорец 0x%1$lx.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR за прозорец 0x%lx за %s ще зацикли.\n"
@@ -483,10 +483,24 @@ msgstr ""
"прозорците да се изключат."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Смяната на фокуса да изчака спирането на показалеца"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Ако е зададено като истина и начинът за фокусиране е „sloppy“ или „mouse“, "
"тогава фокусът няма да се предава веднага при навлизането в прозорец, а едва "
"след като показалецът спре да се движи."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Широчина на границата за влачене"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -494,11 +508,11 @@ msgstr ""
"Общ размер на границите за влачене. Ако видимите граници на темата са по-"
"малки, се добавят невидими граници, за да се достигне тази величина."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Избиране при обхождане чрез изскачащ прозорец"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Без изскачащ прозорец при обхождане"

File diff suppressed because it is too large Load Diff

View File

@@ -13,8 +13,8 @@ msgstr ""
"Project-Id-Version: metacity 2.24\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-08-06 23:35+0000\n"
"PO-Revision-Date: 2012-09-07 16:53+0200\n"
"POT-Creation-Date: 2012-10-11 14:32+0000\n"
"PO-Revision-Date: 2012-10-15 22:36+0200\n"
"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
"Language: \n"
@@ -55,16 +55,16 @@ msgstr "Esdeveniment de campana"
msgid "Unknown window information request: %d"
msgstr "Es desconeix la informació demanada sobre la finestra: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:113
#, c-format
msgid "%s is not responding."
msgstr "%s no està responent."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:117
msgid "Application is not responding."
msgstr "L'aplicació no està responent."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:122
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@@ -72,26 +72,26 @@ msgstr ""
"Podeu esperar un moment perquè continuï o podeu forçar-ne la sortida "
"completa."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Wait"
msgstr "_Espera"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Force Quit"
msgstr "_Força'n la sortida"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Manca l'extensió %s necessària per a la composició"
#: ../src/core/display.c:446
#: ../src/core/display.c:492
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr ""
"S'ha produït un error en obrir la pantalla del sistema de finestres X «%s»\n"
#: ../src/core/keybindings.c:844
#: ../src/core/keybindings.c:853
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@@ -161,7 +161,7 @@ msgstr "Escriu versió"
msgid "Mutter plugin to use"
msgstr "Connector del Mutter a utilitzar"
#: ../src/core/prefs.c:1065
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -169,14 +169,14 @@ msgstr ""
"Les solucions temporals per a aplicacions amb errors estan inhabilitades. "
"Pot ser que certes aplicacions no funcionin correctament.\n"
#: ../src/core/prefs.c:1140
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr ""
"No s'ha pogut analitzar la descripció de tipus de lletra «%s» de la clau %s "
"del GSettings\n"
#: ../src/core/prefs.c:1206
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -185,7 +185,7 @@ msgstr ""
"«%s», trobat a la base de dades de la configuració, no és un valor vàlid per "
"al modificador del botó del ratolí\n"
#: ../src/core/prefs.c:1724
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -194,7 +194,7 @@ msgstr ""
"«%s» trobat a la base de dades de la configuració no és un valor vàlid per a "
"la vinculació de tecla «%s»\n"
#: ../src/core/prefs.c:1821
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Espai de treball %d"
@@ -325,7 +325,7 @@ msgid "Window manager error: "
msgstr "Error del gestor de finestres: "
#. first time through
#: ../src/core/window.c:7234
#: ../src/core/window.c:7237
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -341,7 +341,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7899
#: ../src/core/window.c:7902
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -351,23 +351,23 @@ msgstr ""
"redimensionable, però estableix una mida mínima %d x %d i una mida màxima %d "
"x %d; açò no té massa sentit.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "L'aplicació ha definit un _NET_WM_PID %lu fals\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (a %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr ""
"WM_TRANSIENT_FOR no vàlid per a la finestra 0x%lx especificat per a %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR per a la finestra 0x%lx per a %s crearia un bucle.\n"
@@ -495,10 +495,24 @@ msgstr ""
"emergents i ressaltades en commutar entre finestres."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Retarda el canvi del focus fins que s'aturi el punter"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Si és «true» (cert), i el mode del focus és «sloppy» o «mouse», no es "
"canviarà el focus immediatament quan s'entri a una finestra, només es "
"canviarà quan el punter deixi de moure's."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Amplada del contorn arrossegable"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -507,11 +521,11 @@ msgstr ""
"tema no són suficients, s'afegiran contorns invisibles per aconseguir aquest "
"valor."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Selecció de finestra entre les emergents d'una pestanya"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Cancel·lació de les finestres emergents a les pestanyes"
@@ -2152,18 +2166,6 @@ msgstr ""
#~ msgid "Enable Visual Bell"
#~ msgstr "Habilita la campana visual"
#~ msgid ""
#~ "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
#~ "the focused window will be automatically raised after a delay specified "
#~ "by the auto_raise_delay key. This is not related to clicking on a window "
#~ "to raise it, nor to entering a window during drag-and-drop."
#~ msgstr ""
#~ "Si és cert, i el mode del focus és «sloppy» o «mouse», aleshores la "
#~ "finestra amb el focus s'alçarà automàticament després d'un retard, que "
#~ "s'especifica a la clau auto_raise_delay. Això no està relacionat en "
#~ "l'acció de fer clic a una finestra per a alçar-la, ni tampoc en entrar en "
#~ "una finestra en arrossegar i deixar anar."
#~ msgid ""
#~ "If true, ignore the titlebar_font option, and use the standard "
#~ "application font for window titles."

View File

@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: metacity 2.24\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-09-07 16:57+0200\n"
"PO-Revision-Date: 2012-09-07 16:53+0200\n"
"POT-Creation-Date: 2012-10-15 22:39+0200\n"
"PO-Revision-Date: 2012-10-15 22:36+0200\n"
"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
"Language: \n"
@@ -54,36 +54,36 @@ msgstr "Esdeveniment de campana"
msgid "Unknown window information request: %d"
msgstr "Es desconeix la informació demanada sobre la finestra: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:113
#, c-format
msgid "%s is not responding."
msgstr "%s no està responent."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:117
msgid "Application is not responding."
msgstr "L'aplicació no està responent."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:122
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Podeu esperar un moment perquè continue o podeu forçar-ne l'eixida completa."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Wait"
msgstr "_Espera"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Force Quit"
msgstr "_Força'n l'eixida"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Manca l'extensió %s necessària per a la composició"
#: ../src/core/display.c:446
#: ../src/core/display.c:493
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr ""
@@ -159,7 +159,7 @@ msgstr "Escriu versió"
msgid "Mutter plugin to use"
msgstr "Connector del Mutter a utilitzar"
#: ../src/core/prefs.c:1071
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -167,14 +167,14 @@ msgstr ""
"Les solucions temporals per a aplicacions amb errors estan inhabilitades. "
"Pot ser que certes aplicacions no funcionen correctament.\n"
#: ../src/core/prefs.c:1146
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr ""
"No s'ha pogut analitzar la descripció de tipus de lletra «%s» de la clau %s "
"del GSettings\n"
#: ../src/core/prefs.c:1212
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -183,7 +183,7 @@ msgstr ""
"«%s», trobat a la base de dades de la configuració, no és un valor vàlid per "
"al modificador del botó del ratolí\n"
#: ../src/core/prefs.c:1736
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -192,7 +192,7 @@ msgstr ""
"«%s» trobat a la base de dades de la configuració no és un valor vàlid per a "
"la vinculació de tecla «%s»\n"
#: ../src/core/prefs.c:1833
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Espai de treball %d"
@@ -323,7 +323,7 @@ msgid "Window manager error: "
msgstr "Error del gestor de finestres: "
#. first time through
#: ../src/core/window.c:7234
#: ../src/core/window.c:7237
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -339,7 +339,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7899
#: ../src/core/window.c:7902
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -349,23 +349,23 @@ msgstr ""
"redimensionable, però estableix una mida mínima %d x %d i una mida màxima %d "
"x %d; açò no té massa sentit.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "L'aplicació ha definit un _NET_WM_PID %lu fals\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (a %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr ""
"WM_TRANSIENT_FOR no vàlid per a la finestra 0x%lx especificat per a %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR per a la finestra 0x%lx per a %s crearia un bucle.\n"
@@ -492,10 +492,24 @@ msgstr ""
"emergents i ressaltades en commutar entre finestres."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Retarda el canvi del focus fins que s'ature el punter"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Si és «true» (cert), i el mode del focus és «sloppy» o «mouse», no es "
"canviarà el focus immediatament quan s'entri a una finestra, només es "
"canviarà quan el punter deixi de moure's."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Amplada del contorn arrossegable"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -504,11 +518,11 @@ msgstr ""
"tema no són suficients, s'afegiran contorns invisibles per aconseguir este "
"valor."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Selecció de finestra entre les emergents d'una pestanya"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Cancel·lació de les finestres emergents a les pestanyes"
@@ -2149,18 +2163,6 @@ msgstr ""
#~ msgid "Enable Visual Bell"
#~ msgstr "Habilita la campana visual"
#~ msgid ""
#~ "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
#~ "the focused window will be automatically raised after a delay specified "
#~ "by the auto_raise_delay key. This is not related to clicking on a window "
#~ "to raise it, nor to entering a window during drag-and-drop."
#~ msgstr ""
#~ "Si és cert, i el mode del focus és «sloppy» o «mouse», aleshores la "
#~ "finestra amb el focus s'alçarà automàticament després d'un retard, que "
#~ "s'especifica a la clau auto_raise_delay. Això no està relacionat en "
#~ "l'acció de fer clic a una finestra per a alçar-la, ni tampoc en entrar en "
#~ "una finestra en arrossegar i deixar anar."
#~ msgid ""
#~ "If true, ignore the titlebar_font option, and use the standard "
#~ "application font for window titles."

View File

@@ -14,9 +14,9 @@ msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-08-06 23:35+0000\n"
"POT-Creation-Date: 2012-10-16 12:48+0000\n"
"PO-Revision-Date: 2012-03-26 02:24+0200\n"
"Last-Translator: Petr Kovar <pknbe@volny.cz>\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
@@ -55,16 +55,16 @@ msgstr "Událost zvonku"
msgid "Unknown window information request: %d"
msgstr "Neznámý informační požadavek okna: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:111
#, c-format
msgid "%s is not responding."
msgstr "%s nereaguje."
msgid "%s is not responding."
msgstr "%s nereaguje."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:113
msgid "Application is not responding."
msgstr "Aplikace nereaguje."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:118
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@@ -72,25 +72,25 @@ msgstr ""
"Je možné chvíli počkat, aby aplikace mohla pokračovat, nebo si vynutit úplné "
"ukončení aplikace."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Wait"
msgstr "_Počkat"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Force Quit"
msgstr "_Vynutit ukončení"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Schází rozšíření %s vyžadované funkcemi kompozitoru"
#: ../src/core/display.c:446
#: ../src/core/display.c:493
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Nelze otevřít displej X Window System „%s“\n"
#: ../src/core/keybindings.c:844
#: ../src/core/keybindings.c:853
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@@ -159,7 +159,7 @@ msgstr "Vypíše verzi"
msgid "Mutter plugin to use"
msgstr "Zásuvný modul Mutter, který se má použít"
#: ../src/core/prefs.c:1065
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -167,12 +167,12 @@ msgstr ""
"Bylo zakázáno obcházení chyb aplikací. Některé aplikace se možná nebudou "
"chovat správně.\n"
#: ../src/core/prefs.c:1140
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Nelze zpracovat popis písma „%s“ v klíči GSettings %s\n"
#: ../src/core/prefs.c:1206
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -181,7 +181,7 @@ msgstr ""
"„%s“ nalezené v databázi nastavení není platnou hodnotou modifikátoru "
"tlačítka myši\n"
#: ../src/core/prefs.c:1724
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -190,7 +190,7 @@ msgstr ""
"„%s“ nalezené v databázi nastavení není platnou hodnotou klávesové zkratky "
"„%s“\n"
#: ../src/core/prefs.c:1821
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Plocha %d"
@@ -317,7 +317,7 @@ msgid "Window manager error: "
msgstr "Chyba správce oken: "
#. first time through
#: ../src/core/window.c:7234
#: ../src/core/window.c:7237
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -333,7 +333,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7899
#: ../src/core/window.c:7902
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -343,22 +343,22 @@ msgstr ""
"velikost, ale nastavuje min. velikost %d × %d a max. velikost %d × %d; to "
"nedává smysl.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Aplikace nastavila neplatný _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (na %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Neplatné okno WM_TRANSIENT_FOR 0x%lx specifikováno pro %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "Okno WM_TRANSIENT_FOR 0x%lx by vytvořilo smyčku pro %s.\n"
@@ -477,10 +477,24 @@ msgstr ""
"při procházení okny."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Se změnou zaměření čekat na zastavení pohybu ukazatele"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Je-li je zapnuto a režim zaměření je buď „sloppy“ nebo „mouse“, pak se "
"zaměření nezmění hned, když vstoupíte do kona, ale až se přestane pohybovat "
"ukazatel."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Šířka přetažitelného okraje"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -488,11 +502,11 @@ msgstr ""
"Počet všech přetažitelných okrajů. Nestačí-li viditelné okraje motivu, budou "
"přidány neviditelné okraje, aby bylo docíleno zadané hodnoty."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Vybrat okno z překryvné nabídky tabulátoru"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Zrušit překryvné okno tabulátoru"

View File

@@ -18,8 +18,8 @@ msgid ""
msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-09-16 13:35+0200\n"
"PO-Revision-Date: 2012-09-16 01:15+0200\n"
"POT-Creation-Date: 2012-10-15 06:38+0200\n"
"PO-Revision-Date: 2012-10-12 17:24+0200\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
"Language: da\n"
@@ -58,16 +58,16 @@ msgstr "Bip-hændelse"
msgid "Unknown window information request: %d"
msgstr "Ukendt forespørgsel efter vinduesinformation: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:113
#, c-format
msgid "%s is not responding."
msgstr "%s svarer ikke."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:117
msgid "Application is not responding."
msgstr "Program svarer ikke."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:122
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@@ -75,20 +75,20 @@ msgstr ""
"Du kan vælge at vente et lille stykke tid på at programmet fortsætter, eller "
"du kan tvinge programmet til at afslutte fuldstændigt."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Wait"
msgstr "_Vent"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Force Quit"
msgstr "_Tving til at afslutte"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Manglende %s-udvidelse som kræves til komposition"
#: ../src/core/display.c:446
#: ../src/core/display.c:492
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Kunne ikke åbne X Window System-terminalen \"%s\"\n"
@@ -161,7 +161,7 @@ msgstr "Vis version"
msgid "Mutter plugin to use"
msgstr "Mutter-udvidelsesmodul der skal bruges"
#: ../src/core/prefs.c:1071
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -169,13 +169,13 @@ msgstr ""
"Omgåelser for ødelagte programmer deaktiveret. Nogle programmer opfører sig "
"måske ikke korrekt.\n"
#: ../src/core/prefs.c:1146
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr ""
"Kunne ikke fortolke skrifttypebeskrivelsen \"%s\" fra GSettings-nøglen %s\n"
#: ../src/core/prefs.c:1212
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -184,7 +184,7 @@ msgstr ""
"\"%s\" fundet i konfigurationsdatabasen er ikke en gyldig værdi som "
"museknapsmodifikation\n"
#: ../src/core/prefs.c:1736
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -193,7 +193,7 @@ msgstr ""
"\"%s\" fundet i konfigurationsdatabasen er ikke en gyldig værdi for "
"tastebindingen \"%s\"\n"
#: ../src/core/prefs.c:1833
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Arbejdsområde %d"
@@ -323,7 +323,7 @@ msgid "Window manager error: "
msgstr "Vindueshåndteringsfejl: "
#. first time through
#: ../src/core/window.c:7234
#: ../src/core/window.c:7237
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -339,7 +339,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7899
#: ../src/core/window.c:7902
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -349,23 +349,23 @@ msgstr ""
"ændres, men angiver den mindste størrelse %d x %d og den maksimale størrelse "
"%d x %d; dette giver ikke mening.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Program angav en ugyldig _NET_WM_PID %lu\n"
# Lad os håbe dette er rigtigt
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (på %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Ugyldig WM_TRANSIENT_FOR vindue 0x%lx specificeret for %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR vindue 0x%lx for %s vil oprette løkke.\n"
@@ -488,10 +488,24 @@ msgstr ""
"vinduesskifte."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Lad fokusændringer vente indtil markøren holder op med at bevæge sig"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Hvis sat til sand, og fokustilstanden er enten \"sloppy\" eller \"mouse\", "
"vil fokus ikke blive ændret omgående når man går ind i et nyt vindue, men "
"først efter markøren holder op med at bevæge sig."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Bredde af den trækbare kant"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -499,11 +513,11 @@ msgstr ""
"Samlet mængde kant der kan trækkes. Hvis temaets synlige grænser ikke er "
"nok, så vil usynlige kanter blive tilføjet for at møde denne værdi."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Vælg vindue fra tab-pop-op"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Annullér faneblads-pop-op"

View File

@@ -13,8 +13,8 @@ msgstr ""
"Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-09-06 16:35+0000\n"
"PO-Revision-Date: 2012-09-06 21:22+0200\n"
"POT-Creation-Date: 2012-10-22 19:35+0000\n"
"PO-Revision-Date: 2012-10-26 08:14+0200\n"
"Last-Translator: Tobias Endrigkeit <tobiasendrigkeit@googlemail.com>\n"
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
"Language: de\n"
@@ -56,16 +56,16 @@ msgstr "Klangereignis"
msgid "Unknown window information request: %d"
msgstr "Unbekannte Fensterinformation angefordert: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:113
#, c-format
msgid "%s is not responding."
msgstr "%s antwortet nicht."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:117
msgid "Application is not responding."
msgstr "Die Anwendung antwortet nicht."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:122
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@@ -73,20 +73,20 @@ msgstr ""
"Sie können der Anwendung noch etwas Zeit geben oder ein sofortiges Beenden "
"erzwingen."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Wait"
msgstr "_Warten"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Force Quit"
msgstr "_Beenden erzwingen"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Die für Compositing benötigte %s-Erweiterung wurde nicht gefunden"
#: ../src/core/display.c:446
#: ../src/core/display.c:493
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "X-Window-Systemanzeige »%s« konnte nicht geöffnet werden\n"
@@ -163,7 +163,7 @@ msgstr "Version ausgeben"
msgid "Mutter plugin to use"
msgstr "Zu benutzendes Mutter-Plugin"
#: ../src/core/prefs.c:1071
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -171,14 +171,14 @@ msgstr ""
"Provisorien (Workarounds) für defekte Anwendungen abgeschaltet. "
"Möglicherweise funktionieren manche Anwendungen nicht richtig.\n"
#: ../src/core/prefs.c:1146
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr ""
"Schriftbeschreibung »%s« aus GConf-Schlüssel %s konnte nicht verarbeitet "
"werden\n"
#: ../src/core/prefs.c:1212
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -187,7 +187,7 @@ msgstr ""
"In der Konfigurationsdatenbank gefundenes »%s« ist kein zulässiger Wert für "
"den Maustastenumschalter\n"
#: ../src/core/prefs.c:1736
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -196,7 +196,7 @@ msgstr ""
"In der Konfigurationsdatenbank gefundenes »%s« ist kein zulässiger Wert für "
"die Tastenkombination »%s«\n"
#: ../src/core/prefs.c:1833
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Arbeitsfläche %d"
@@ -328,7 +328,7 @@ msgid "Window manager error: "
msgstr "Fensterverwalter-Fehler:"
#. first time through
#: ../src/core/window.c:7234
#: ../src/core/window.c:7237
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -350,7 +350,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7899
#: ../src/core/window.c:7902
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -360,22 +360,22 @@ msgstr ""
"veränderbar ist, setzt jedoch die minimale Größe auf %d x %d und die "
"maximale Größe auf %d x %d; dies ergibt keinen Sinn.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Anwendung hat eine unsinnige _NET_WM_PID %lu angegeben\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (auf %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Ungültiges WM_TRANSIENT_FOR-Fenster 0x%lx festgelegt für %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr ""
@@ -501,11 +501,25 @@ msgstr ""
"Hervorhebung des Rahmens deaktiviert werden soll."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Fokus-Änderungen verzögern, bis der Zeiger aufhört sich zu bewegen"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Falls dieser Schlüssel gesetzt ist und der Fokusmodus entweder »sloppy« oder "
"»mouse« ist, wird der Fokus nicht sofort beim Erreichen eines Fensters "
"geändert, sondern erst, wenn der Zeiger aufhört sich zu bewegen."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Breite der ziehbaren Ränder"
# Lange Beschreibung von »Draggable border width«
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -514,11 +528,11 @@ msgstr ""
"nicht ausreichen, werden unsichtbare Ränder hinzugefügt, um diesen Wert zu "
"erreichen."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Fenster aus Tab-Anzeige auswählen"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Tab-Anzeige abbrechen"

View File

@@ -18,8 +18,8 @@ msgstr ""
"Project-Id-Version: metacity.gnome-2-26\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-08-31 13:39+0000\n"
"PO-Revision-Date: 2012-09-13 04:46+0200\n"
"POT-Creation-Date: 2012-10-11 14:32+0000\n"
"PO-Revision-Date: 2012-10-13 00:59+0200\n"
"Last-Translator: Tom Tryfonidis <tomtryf@gmail.com>\n"
"Language-Team: Greek <team@gnome.gr>\n"
"Language: el\n"
@@ -59,16 +59,16 @@ msgstr "Ηχητικό συμβάν κουδουνιού"
msgid "Unknown window information request: %d"
msgstr "Άγνωστη αίτηση πληροφοριών παραθύρου: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:113
#, c-format
msgid "%s is not responding."
msgstr "Το %s δεν ανταποκρίνεται."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:117
msgid "Application is not responding."
msgstr "Η εφαρμογή δεν ανταποκρίνεται."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:122
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@@ -76,21 +76,21 @@ msgstr ""
"Μπορείτε να επιλέξετε να περιμένετε λίγο για να συνεχίσει, ή να εξαναγκάσετε "
"την εφαρμογή σε έξοδο."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Wait"
msgstr "_Αναμονή"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Force Quit"
msgstr "_Εξαναγκασμός σε τερματισμό"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Λείπει η επέκταση %s που απαιτείται για compositing"
# gconf/gconf-internals.c:2416
#: ../src/core/display.c:446
#: ../src/core/display.c:492
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Αποτυχία ανοίγματος οθόνης του συστήματος παραθύρων Χ '%s'\n"
@@ -165,7 +165,7 @@ msgstr "Εκτύπωση έκδοσης"
msgid "Mutter plugin to use"
msgstr "Πρόσθετα του Mutter για χρήση"
#: ../src/core/prefs.c:1071
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -173,13 +173,13 @@ msgstr ""
"Οι προσωρινές λύσεις για προβληματικές εφαρμογές έχουν απενεργοποιηθεί. "
"Μερικές εφαρμογές μπορεί να μη συμπεριφέρονται σωστά.\n"
#: ../src/core/prefs.c:1146
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr ""
"Αδυναμία ανάλυσης περιγραφής γραμματοσειράς \"%s\" από κλειδί GSettings %s\n"
#: ../src/core/prefs.c:1212
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -188,7 +188,7 @@ msgstr ""
"Το \"%s\" που βρέθηκε στη βάση δεδομένων ρυθμίσεων δεν είναι μια έγκυρη τιμή "
"για μετατροπέα κουμπιού ποντικιού\n"
#: ../src/core/prefs.c:1736
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -197,7 +197,7 @@ msgstr ""
"Το \"%s\" που βρέθηκε στη βάση δεδομένων ρυθμίσεων δεν είναι μια έγκυρη τιμή "
"για συνδυασμό πλήκτρων\"%s\"\n"
#: ../src/core/prefs.c:1833
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Χώρος εργασίας %d"
@@ -333,7 +333,7 @@ msgid "Window manager error: "
msgstr "Σφάλμα διαχειριστή παραθύρων: "
#. first time through
#: ../src/core/window.c:7234
#: ../src/core/window.c:7237
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -349,7 +349,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7899
#: ../src/core/window.c:7902
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -359,22 +359,22 @@ msgstr ""
"μεγέθους, αλλά όρισε ελάχιστο μέγεθος %d x %d και μέγιστο μέγεθος %d x %d; "
"αυτό είναι ακατανόητο.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Η εφαρμογή έθεσε ένα πλαστό _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (σε %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Άκυρο WM_TRANSIENT_FOR παράθυρο 0x%lx που καθορίστηκε για %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr ""
@@ -500,10 +500,25 @@ msgstr ""
"του πλαισίου για την κυκλική εναλλαγή των παραθύρων."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr ""
"Η καθυστέρηση της εστίασης αλλάζει μέχρι ο δείκτης να σταματήσει να κινείται"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Αν οριστεί σε αληθής, και η λειτουργία της εστίασης είναι \"sloppy\" ή "
"\"mouse\" τότε η εστίαση δεν θα αλλάξει αμέσως όταν ανοίγετε ένα παράθυρο, "
"αλλά μόνο όταν ο δείκτης σταματήσει να κινείται."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Συρόμενο πλάτος περιγράμματος"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -512,11 +527,11 @@ msgstr ""
"θέματος δεν είναι αρκετά, θα προστεθούν αόρατα περιγράμματα για την κάλυψη "
"αυτής της τιμής."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Επιλογή παραθύρου από την αναδυόμενη καρτέλα"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Ακύρωση αναδυόμενης καρτέλας"
@@ -769,9 +784,6 @@ msgstr "Τα διαβαθμισμένα χρώματα θα πρέπει να έ
#: ../src/ui/theme.c:1201
#, c-format
#| msgid ""
#| "GTK color specification must have a close bracket after the state, e.g. "
#| "gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
msgid ""
"GTK custom color specification must have color name and fallback in "
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""

View File

@@ -5,20 +5,23 @@
# Gareth Owen <gowen72@yahoo.com>, 2004.
# Philip Withnall <philip@tecnocode.co.uk>, 2010.
# Bruce Cowan <bruce@bcowan.me.uk>, 2011, 2012.
# Chris Leonard <cjlhomeaddress@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-09-05 19:46+0100\n"
"PO-Revision-Date: 2012-09-05 19:47+0100\n"
"Last-Translator: Bruce Cowan <bruce@bcowan.me.uk>\n"
"Language-Team: British English <en@li.org>\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-10-11 14:45+0000\n"
"PO-Revision-Date: 2012-10-11 12:23-0400\n"
"Last-Translator: Chris Leonard <cjlhomeaddress@gmail.com>\n"
"Language-Team: Sugar Labs\n"
"Language: en_GB\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Virtaal 0.7.1\n"
"X-Project-Style: gnome\n"
#: ../src/50-mutter-windows.xml.in.h:1
msgid "Windows"
@@ -52,16 +55,16 @@ msgstr "Bell event"
msgid "Unknown window information request: %d"
msgstr "Unknown window information request: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:113
#, c-format
msgid "%s is not responding."
msgstr "%s is not responding."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:117
msgid "Application is not responding."
msgstr "Application is not responding."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:122
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@@ -69,20 +72,20 @@ msgstr ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Wait"
msgstr "_Wait"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Force Quit"
msgstr "_Force Quit"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Missing %s extension required for compositing"
#: ../src/core/display.c:446
#: ../src/core/display.c:492
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Failed to open X Window System display '%s'\n"
@@ -155,7 +158,7 @@ msgstr "Print version"
msgid "Mutter plugin to use"
msgstr "Mutter plugin to use"
#: ../src/core/prefs.c:1071
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -163,12 +166,12 @@ msgstr ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
#: ../src/core/prefs.c:1146
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Could not parse font description \"%s\" from GSettings key %s\n"
#: ../src/core/prefs.c:1212
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -177,7 +180,7 @@ msgstr ""
"\"%s\" found in configuration database is not a valid value for mouse button "
"modifier\n"
#: ../src/core/prefs.c:1736
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -186,7 +189,7 @@ msgstr ""
"\"%s\" found in configuration database is not a valid value for keybinding "
"\"%s\"\n"
#: ../src/core/prefs.c:1833
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Workspace %d"
@@ -314,7 +317,7 @@ msgid "Window manager error: "
msgstr "Window manager error: "
#. first time through
#: ../src/core/window.c:7234
#: ../src/core/window.c:7237
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -330,7 +333,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7899
#: ../src/core/window.c:7902
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -339,22 +342,22 @@ msgstr ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
"%d x %d and max size %d x %d; this doesn't make much sense.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Application set a bogus _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (on %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
@@ -473,10 +476,24 @@ msgstr ""
"for window cycling."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Delay focus changes until the pointer stops moving"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Draggable border width"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -484,11 +501,11 @@ msgstr ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Select window from tab popup"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Cancel tab popup"
@@ -2107,17 +2124,6 @@ msgstr "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
#~ msgid "Enable Visual Bell"
#~ msgstr "Enable Visual Bell"
#~ msgid ""
#~ "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
#~ "the focused window will be automatically raised after a delay specified "
#~ "by the auto_raise_delay key. This is not related to clicking on a window "
#~ "to raise it, nor to entering a window during drag-and-drop."
#~ msgstr ""
#~ "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
#~ "the focused window will be automatically raised after a delay specified "
#~ "by the auto_raise_delay key. This is not related to clicking on a window "
#~ "to raise it, nor to entering a window during drag-and-drop."
#~ msgid ""
#~ "If true, ignore the titlebar_font option, and use the standard "
#~ "application font for window titles."

View File

@@ -14,8 +14,8 @@ msgstr ""
"Project-Id-Version: mutter.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-07-15 00:47+0000\n"
"PO-Revision-Date: 2012-07-16 16:08+0200\n"
"POT-Creation-Date: 2012-10-16 12:48+0000\n"
"PO-Revision-Date: 2012-10-16 18:11+0200\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"Language: \n"
@@ -23,6 +23,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Generator: Gtranslator 2.91.5\n"
#: ../src/50-mutter-windows.xml.in.h:1
msgid "Windows"
@@ -56,17 +57,17 @@ msgstr "Evento de campana"
msgid "Unknown window information request: %d"
msgstr "Petición de información de ventana desconocida: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:111
#, c-format
#| msgid "<tt>%s</tt> is not responding."
msgid "%s is not responding."
msgstr "%s no está respondiendo."
#| msgid "%s is not responding."
msgid "%s is not responding."
msgstr "«%s» no está respondiendo."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:113
msgid "Application is not responding."
msgstr "La aplicación no está respondiendo."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:118
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@@ -74,25 +75,25 @@ msgstr ""
"Puede elegir esperar un rato para ver si continua o forzar la aplicación "
"para cerrarla completamente."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Wait"
msgstr "_Esperar"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Force Quit"
msgstr "_Forzar la salida"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Falta la extensión %s requerida para la composición"
#: ../src/core/display.c:446
#: ../src/core/display.c:493
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Ocurrió un error al abrir la pantalla de X Window System «%s»\n"
#: ../src/core/keybindings.c:844
#: ../src/core/keybindings.c:853
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@@ -161,7 +162,7 @@ msgstr "Imprimir versión"
msgid "Mutter plugin to use"
msgstr "Complemento de mutter que usar"
#: ../src/core/prefs.c:1065
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -169,14 +170,14 @@ msgstr ""
"Los arreglos para aplicaciones rotas se han deshabilitado. Algunas "
"aplicaciones podrían no comportarse correctamente.\n"
#: ../src/core/prefs.c:1140
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr ""
"No se pudo analizar la descripción de la tipografía «%s» de la clave "
"GSettings %s\n"
#: ../src/core/prefs.c:1206
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -185,7 +186,7 @@ msgstr ""
"«%s» encontrado en la base de datos de configuración no es un valor válido "
"para el modificador del botón del ratón\n"
#: ../src/core/prefs.c:1724
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -194,7 +195,7 @@ msgstr ""
"«%s» encontrado en la base de datos de configuración no es un valor válido "
"para la combinación de teclas «%s»\n"
#: ../src/core/prefs.c:1821
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Área de trabajo %d"
@@ -351,23 +352,23 @@ msgstr ""
"redimensionable, pero configuró el tamaño mínimo a %d x %d y el tamaño "
"máximo a %d x %d ; esto no tiene mucho sentido.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "La aplicación establecio un _NET_WM_PID %lu erróneo\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (on %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr ""
"WM_TRANSIENT_FOR no válido para la ventana 0x%lx especificada para %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR ventana 0x%lx para %s crearía un bucle.\n"
@@ -492,10 +493,24 @@ msgstr ""
"desactivar al cambiar entre ventanas."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Retrasar el cambio de foco hasta detener el puntero"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Si está establecido a «true» y el modo del foco es «sloppy» o «mouse» entonces "
"el foco no se cambiará inmediatamente al entrar en una ventana, pero sí "
"después de dejar quieto el puntero."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Anchura arrastrable del borde"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -503,11 +518,11 @@ msgstr ""
"La cantidad total de borde arrastrable. Si los bordes visibles del tema no "
"son suficientes, se añadirán bordes invisibles para satisfacer este valor."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Seleccionar ventana de la pestaña emergente"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Cancelar pestaña emergente"
@@ -2198,18 +2213,6 @@ msgstr ""
#~ msgid "Enable Visual Bell"
#~ msgstr "Activar la campana visual"
#~ msgid ""
#~ "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
#~ "the focused window will be automatically raised after a delay specified "
#~ "by the auto_raise_delay key. This is not related to clicking on a window "
#~ "to raise it, nor to entering a window during drag-and-drop."
#~ msgstr ""
#~ "Si está establecido a «true» y el modo del foco es «sloppy» o «mouse» "
#~ "entonces la ventana con el foco será elevada automáticamente tras un "
#~ "retardo especificado en la clave auto_raise_delay. Esto no está "
#~ "relacionado con pulsar en una ventana para elevarla, no con entrar en una "
#~ "ventana durante una operación de arrastrar y soltar."
#~ msgid ""
#~ "If true, ignore the titlebar_font option, and use the standard "
#~ "application font for window titles."

View File

@@ -14,8 +14,8 @@ msgstr ""
"Project-Id-Version: mutter MASTER\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-03-11 22:19+0000\n"
"PO-Revision-Date: 2012-03-12 00:47+0200\n"
"POT-Creation-Date: 2012-10-17 20:44+0000\n"
"PO-Revision-Date: 2012-10-21 20:48+0300\n"
"Last-Translator: Mattias Põldaru <mahfiaz@gmail.com>\n"
"Language-Team: Estonian <>\n"
"Language: et\n"
@@ -49,8 +49,8 @@ msgid "Unknown window information request: %d"
msgstr "Tundmatu aknateabe päring: %d"
#, c-format
msgid "<tt>%s</tt> is not responding."
msgstr "<tt>%s</tt> ei vasta."
msgid "“%s” is not responding."
msgstr "„%s” ei vasta."
msgid "Application is not responding."
msgstr "Rakendus ei vasta."
@@ -128,8 +128,8 @@ msgstr ""
msgid "Print version"
msgstr "Versiooni printimine"
msgid "Comma-separated list of compositor plugins"
msgstr "Komaga eraldatud nimekiri komposiitmontaaži pluginatest"
msgid "Mutter plugin to use"
msgstr "Millist Mutteri pluginat kasutada"
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
@@ -353,16 +353,6 @@ msgstr ""
"Kui märgitud, siis eraldi tiitliribade asemel on moodaalsed dialoogid "
"emaakna tiitliribade küljes ning liiguvad koos emaaknaga."
msgid "Live Hidden Windows"
msgstr "Varjatud akende aktiivsus"
msgid ""
"Determines whether hidden windows (i.e., minimized windows and windows on "
"other workspaces than the current one) should be kept alive."
msgstr ""
"Määrab, kas varjatud aknaid (nt minimeeritud ja teistel tööaladel aknad) "
"hoitakse elus."
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Akna ümberpaigutamine selle lohistamisel ekraani serva"
@@ -406,6 +396,17 @@ msgstr ""
"Kui märgitud, siis on hüpikaken ja esiletõstmise raam keelatud akende "
"vahetamisel."
msgid "Delay focus changes until the pointer stops moving"
msgstr "Fookusemuutused lükatakse edasi kuni kursor peatub"
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Kui tõene ning fookusrežiim on kas \"sloppy\" või \"mouse\", siis fookust ei "
"vahetata kohe, kui kursor aknale liigub, vaid alles pärast kursori peatumist."
msgid "Draggable border width"
msgstr "Lohistatava äärise laius."
@@ -426,39 +427,6 @@ msgstr "Tabulaatori hüpikakna katkestamine"
msgid "Usage: %s\n"
msgstr "Kasutamine: %s\n"
msgid "Close Window"
msgstr "Sulge aken"
msgid "Window Menu"
msgstr "Aknamenüü"
msgid "Minimize Window"
msgstr "Akna minimeerimine"
msgid "Maximize Window"
msgstr "Akna maksimeerimine"
msgid "Restore Window"
msgstr "Akna taastamine"
msgid "Roll Up Window"
msgstr "Akna kokkukerimine"
msgid "Unroll Window"
msgstr "Akna lahtikerimine"
msgid "Keep Window On Top"
msgstr "Akna kõige pealmiseks määramine"
msgid "Remove Window From Top"
msgstr "Eemalda aken kõige pealmise kohalt"
msgid "Always On Visible Workspace"
msgstr "Alati nähtaval tööalal"
msgid "Put Window On Only One Workspace"
msgstr "Tõsta aken ainult ühele tööalale"
#. Translators: Translate this string the same way as you do in libwnck!
msgid "Mi_nimize"
msgstr "_Minimeeri"

728
po/fi.po

File diff suppressed because it is too large Load Diff

View File

@@ -20,8 +20,8 @@ msgstr ""
"org/enter_bug.cgi?product=mutter&component=general\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-09-05 18:47+0000\n"
"PO-Revision-Date: 2012-06-15 20:22+0200\n"
"POT-Creation-Date: 2012-10-11 14:32+0000\n"
"PO-Revision-Date: 2012-10-15 21:26+0200\n"
"Last-Translator: Alain Lojewski <allomervan@gmail.com>\n"
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
"Language: \n"
@@ -61,16 +61,16 @@ msgstr "Évènement sonore"
msgid "Unknown window information request: %d"
msgstr "Requête d'information de fenêtre inconnue : %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:113
#, c-format
msgid "%s is not responding."
msgstr "%s ne répond pas."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:117
msgid "Application is not responding."
msgstr "L'application ne répond pas."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:122
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@@ -78,20 +78,20 @@ msgstr ""
"Vous pouvez patienter un instant pour continuer ou forcer l'application à "
"quitter définitivement."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Wait"
msgstr "_Attendre"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Force Quit"
msgstr "_Forcer à quitter"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Il manque l'extension %s nécessaire à la composition"
#: ../src/core/display.c:446
#: ../src/core/display.c:492
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Impossible d'ouvrir le visuel « %s » du système X Window\n"
@@ -166,7 +166,7 @@ msgstr "Afficher la version"
msgid "Mutter plugin to use"
msgstr "Greffon de Mutter à utiliser"
#: ../src/core/prefs.c:1071
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -174,14 +174,14 @@ msgstr ""
"Solutions de rechange désactivées pour les applications endommagées. "
"Certaines applications peuvent ne pas se comporter correctement.\n"
#: ../src/core/prefs.c:1146
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr ""
"Impossible d'analyser la description de police « %s » depuis la clé "
"GSettings %s\n"
#: ../src/core/prefs.c:1212
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -190,7 +190,7 @@ msgstr ""
"« %s » trouvée dans la base de données de configuration n'est pas une valeur "
"correcte pour le bouton de souris\n"
#: ../src/core/prefs.c:1736
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -199,7 +199,7 @@ msgstr ""
"« %s » trouvé dans la base de données de configuration n'est pas une valeur "
"correcte pour la combinaison de touches « %s »\n"
#: ../src/core/prefs.c:1833
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Espace de travail %d"
@@ -333,7 +333,7 @@ msgid "Window manager error: "
msgstr "Erreur du gestionnaire de fenêtres : "
#. first time through
#: ../src/core/window.c:7234
#: ../src/core/window.c:7237
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -349,7 +349,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7899
#: ../src/core/window.c:7902
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -359,22 +359,22 @@ msgstr ""
"redimensionnable, mais positionne une taille minimale de %d x %d et une "
"taille maximale de %d x %d ; ceci n'a pas beaucoup de sens.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "L'application a défini un _NET_WM_PID %lu erroné\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (sur %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Fenêtre WM_TRANSIENT_FOR 0x%lx non valide indiquée pour %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "Fenêtre WM_TRANSIENT_FOR 0x%lx pour %s créerait une boucle.\n"
@@ -498,10 +498,24 @@ msgstr ""
"doit être désactivée pour la consultation des fenêtres."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Attend l'arrêt du pointeur avant le changement de focus"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Si définit à true et que le mode de focus est soit « sloppy » ou « souris », "
"alors le focus ne sera pas changé immédiatement en passant sur une fenêtre, "
"mais seulement après que le pointeur s'arrête."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Largeur de bordure ajustable"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -510,13 +524,13 @@ msgstr ""
"visibles du thème ne sont pas suffisantes, des bordures invisibles sont "
"ajoutées pour arriver à cette valeur."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr ""
"Sélectionner la fenêtre dans la vue qui apparaît suite à un appui sur la "
"touche tab"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Fermer la vue qui apparaît suite à un appui sur la touche tab"

View File

@@ -1,9 +1,7 @@
# Galician translation of mutter.
# Copyright (C) 2001, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
#
# Proxecto Trasno - Adaptación do software libre á lingua galega: Se desexas
# colaborar connosco, podes atopar máis información en http://www.trasno.net
#
# Manuel A. Fernández Montecelo <manuel@sindominio.net>, 2001, 2005.
# Ignacio Casal Quinteiro <nacho.resa@gmail.com>, 2005, 2006.
# Ignacio Casal Quinteiro <icq@cvs.gnome.org>, 2007.
@@ -11,20 +9,21 @@
# Mancomún - Centro de Referencia e Servizos de Software Libre <g11n@mancomun.org>, 2009.
# Fran Diéguez <frandieguez@gnome.org>, 2009, 2010, 2011, 2012.
# Leandro Regueiro <leandro.regueiro@gmail.com>, 2012.
# Fran Dieguez <frandieguez@gnome.org>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: gl\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-09-01 12:33+0200\n"
"PO-Revision-Date: 2012-08-17 14:18+0200\n"
"Last-Translator: Leandro Regueiro <leandro.regueiro@gmail.com>\n"
"Language-Team: Galician <gnome-l10n-gl@gnome.org>\n"
"POT-Creation-Date: 2012-10-16 17:05+0200\n"
"PO-Revision-Date: 2012-10-16 17:06+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
"Language-Team: gnome-l10n-gl@gnome.org\n"
"Language: gl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Generator: Lokalize 1.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Virtaal 0.7.1\n"
#: ../src/50-mutter-windows.xml.in.h:1
msgid "Windows"
@@ -58,16 +57,16 @@ msgstr "Evento de campá"
msgid "Unknown window information request: %d"
msgstr "Petición de información de xanela descoñecida: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:111
#, c-format
msgid "%s is not responding."
msgstr "%s non está respondendo."
msgid "%s is not responding."
msgstr "«%s» non está respondendo."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:113
msgid "Application is not responding."
msgstr "O Aplicativo non está respondendo."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:118
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@@ -75,25 +74,25 @@ msgstr ""
"Pode elixir esperar un momento para ver se continúa ou forzar ao aplicativo "
"a pechar completamente."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Wait"
msgstr "Espe_rar"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Force Quit"
msgstr "_Forzar a saída"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Falta a extensión %s que se require para a composición"
#: ../src/core/display.c:446
#: ../src/core/display.c:493
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Produciuse un erro ao abrir a visualización do X Window System «%s»\n"
#: ../src/core/keybindings.c:844
#: ../src/core/keybindings.c:853
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@@ -162,7 +161,7 @@ msgstr "Imprimir versión"
msgid "Mutter plugin to use"
msgstr "Engadido de mutter que usar"
#: ../src/core/prefs.c:1065
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -170,14 +169,14 @@ msgstr ""
"Desactiváronse os arranxos para aplicativos danados. Pode que algúns "
"aplicativos non se comporten correctamente.\n"
#: ../src/core/prefs.c:1140
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr ""
"Non foi posíbel analizar a descrición do tipo de letra «%s» da chave "
"GSettings %s\n"
#: ../src/core/prefs.c:1206
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -186,7 +185,7 @@ msgstr ""
"«%s» atopados na base de datos de configuración non é un valor correcto para "
"o modificador do botón do rato\n"
#: ../src/core/prefs.c:1724
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -195,7 +194,7 @@ msgstr ""
"«%s» atopados na base de datos de configuración non é un valor correcto para "
"a combinación de teclas «%s»\n"
#: ../src/core/prefs.c:1821
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Espazo de traballo %d"
@@ -324,7 +323,7 @@ msgid "Window manager error: "
msgstr "Erro do xestor de xanelas: "
#. first time through
#: ../src/core/window.c:7234
#: ../src/core/window.c:7237
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -340,7 +339,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7899
#: ../src/core/window.c:7902
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -350,23 +349,23 @@ msgstr ""
"mais configurou o tamaño mínimo a %d x %d e o tamaño máximo a %d x %d, isto "
"non ten moito sentido.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "O aplicativo configurou un _NET_WM_PID %lu falso\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (en %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr ""
"WM_TRANSIENT_FOR non válido para a xanela 0x%lx especificada para %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR xanela 0x%lx para %s crearía un bucle.\n"
@@ -488,10 +487,24 @@ msgstr ""
"realzados ao cambiar entre xanelas."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Retrasar o cambio de enfoque até que o punteiro se deteña ao moverse"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Se está estabelecido a verdadeiro e o modo de enfoque é «sloopy» ou «mouse» "
"entón o enfoque non se cambiará de forma inmediata ao entrar nunha xanela, "
"só cando o punteiro se deteña sobre ela."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Anchura arrastrábel do bordo"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -499,11 +512,11 @@ msgstr ""
"A cantidade total de bordo arrastrábel. Se os bordos visíbeis do tema non "
"son suficientes, engadiranse bordos invisíbeis para satisfacer este valor."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Seleccionar xanela da lapela emerxente"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Cancelar lapela emerxente"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
"cgi?product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-08-06 23:35+0000\n"
"PO-Revision-Date: 2012-08-08 12:12+0530\n"
"PO-Revision-Date: 2012-09-22 23:31+0530\n"
"Last-Translator: \n"
"Language-Team: gu_IN <kde-i18n-doc@kde.org>\n"
"Language: \n"
@@ -36,27 +36,26 @@ msgstr "વિન્ડો"
#: ../src/50-mutter-windows.xml.in.h:2
msgid "View split on left"
msgstr ""
msgstr "ડાબી બાજુએ અલગ કરેલ દૃશ્ય"
#: ../src/50-mutter-windows.xml.in.h:3
msgid "View split on right"
msgstr ""
msgstr "જમણી બાજુએ અલગ કરેલ દૃશ્ય"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:492
#, fuzzy, c-format
#, c-format
#| msgid ""
#| "Could not acquire window manager selection on screen %d display \"%s\"\n"
msgid ""
"Another compositing manager is already running on screen %i on display \"%s"
"\"."
msgstr ""
"સ્ક્રીન %d કે જે ડિસ્પ્લે \"%s\" પર છે તે વિન્ડો વ્યવસ્થાપકની પસંદગીને મેળવી શકાતી નથી\n"
msgstr "સ્ક્રીન %i કે જે દર્શાવ \"%s\" પર છે તે બીજુ બનતુ સંચાલક પહેલેથી ચાલી રહ્યુ છે."
#: ../src/core/bell.c:320
msgid "Bell event"
msgstr ""
msgstr "બેલ ઘટના"
#: ../src/core/core.c:157
#, c-format
@@ -253,10 +252,10 @@ msgid "Failed to parse saved session file: %s\n"
msgstr "સંગ્રહિત સત્રની ફાઈલ ને પદચ્છેદ કરવામાં ભૂલ: %s\n"
#: ../src/core/session.c:1185
#, fuzzy, c-format
#, c-format
#| msgid "<metacity_session> attribute seen but we already have the session ID"
msgid "<mutter_session> attribute seen but we already have the session ID"
msgstr "<metacity_session> લક્ષણ દેખાય છે પરંતુ આપણી પાસે પહેલેથી જ સત્ર ID છે"
msgstr "<mutter_session> લક્ષણ દેખાય છે પરંતુ આપણી પાસે પહેલેથી જ સત્ર ID છે"
#: ../src/core/session.c:1198 ../src/core/session.c:1273
#: ../src/core/session.c:1305 ../src/core/session.c:1377
@@ -276,7 +275,6 @@ msgid "Unknown element %s"
msgstr "અજાણી વસ્તુ %s"
#: ../src/core/session.c:1809
#, fuzzy
#| msgid ""
#| "These windows do not support \"save current setup\" and will have to be "
#| "restarted manually next time you log in."
@@ -284,7 +282,7 @@ msgid ""
"These windows do not support &quot;save current setup&quot; and will have to "
"be restarted manually next time you log in."
msgstr ""
"આ બધી વિન્ડો \"વર્તમાન સુયોજનનો સંગ્રહ કરો\" ને આધાર આપતી નથી અને બીજી વખત તમે પ્રવેશ "
"આ બધી વિન્ડો &quot;વર્તમાન સુયોજનનો સંગ્રહ કરો&quot; ને આધાર આપતી નથી અને બીજી વખત તમે પ્રવેશ "
"કરો ત્યારે જાતે જ ફરી શરુ કરવું પડશે."
#: ../src/core/util.c:80
@@ -366,10 +364,10 @@ msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "અયોગ્ય WM_TRANSIENT_FOR વિન્ડો 0x%lx એ %s માટે સ્પષ્ટ થયેલ છે.\n"
#: ../src/core/window-props.c:1495
#, fuzzy, c-format
#, c-format
#| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "અયોગ્ય WM_TRANSIENT_FOR વિન્ડો 0x%lx એ %s માટે સ્પષ્ટ થયેલ છે.\n"
msgstr "WM_TRANSIENT_FOR વિન્ડો 0x%lx એ %s માટે લુપ બનાવશે.\n"
#: ../src/core/xprops.c:155
#, c-format
@@ -401,10 +399,9 @@ msgid "Mutter"
msgstr "Mutter"
#: ../src/org.gnome.mutter.gschema.xml.in.h:1
#, fuzzy
#| msgid "Modifier to use for modified window click actions"
msgid "Modifier to use for extended window management operations"
msgstr "બદલેલ વિન્ડોની ક્લિક ક્રિયાઓ માટે વપરવાનું બદલનાર"
msgstr "વિસ્તરેલ વિન્ડો સંચાલન ક્રિયાઓ માટે વપરાતુ સંશોધક"
#: ../src/org.gnome.mutter.gschema.xml.in.h:2
msgid ""
@@ -413,6 +410,9 @@ msgid ""
"\"Windows key\" on PC hardware. It's expected that this binding either the "
"default or set to the empty string."
msgstr ""
"આ કી \"overlay\" ને શરૂ કરશે, કે જે વિન્ડો ઝાંખી અને કાર્યક્રમ શરૂઆત સિસ્ટમનું સંયોજન છે. "
"મૂળભૂત PC હાર્ડવેર પર \"Windows key\" ને લગતુ છે. તેને ઇચ્છા રાખેલ થે કે આ ક્યાંતો મૂળભૂત છે "
"અથવા ખાલી શબ્દમાળામાં સુયોજિત છે."
#: ../src/org.gnome.mutter.gschema.xml.in.h:3
msgid "Attach modal dialogs"
@@ -424,10 +424,12 @@ msgid ""
"attached to the titlebar of the parent window and are moved together with "
"the parent window."
msgstr ""
"જ્યારે true હોય, સ્વતંત્ર શીર્ષકપટ્ટીને લીધા કરતા, મોડલ સંવાદ મુખ્ય વિન્ડોની શીર્ષકપટ્ટી સાથે "
"જોડાયેલ છે તેવુ દેખાય છે અને મુખ્ય વિન્ડો સાથે એકસાથે ખસેડેલ છે."
#: ../src/org.gnome.mutter.gschema.xml.in.h:5
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
msgstr "જ્યારે સ્ક્રીન બાજુ પર વિન્ડોને પડતી મૂકી રહ્યા હોય ત્યારે ટાઇલીંગ સક્રિય કરો"
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
msgid ""
@@ -435,6 +437,9 @@ msgid ""
"vertically and resizes them horizontally to cover half of the available "
"area. Dropping windows on the top screen edge maximizes them completely."
msgstr ""
"જો સક્રિય હોય તો, ઊભી સ્ક્રીન બાજુ પર પડતી વિન્ડો તેઓને ઊભી રીતે મહત્તમ કરે છે અને ઉપલબ્ધ "
"વિસ્તારમાં આડી રીતે આવરવા માટે આડી રીતે તેઓનું માપ બદલે છે. ટોચ સ્ક્રીન પર પડતી બાજુ પર પડતી "
"વિન્ડોને તેઓને સંપૂર્ણપણે મહત્તમ કરે છે."
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
msgid "Workspaces are managed dynamically"
@@ -446,6 +451,9 @@ msgid ""
"static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)."
msgstr ""
"શું કામકરવાની જગ્યા ગતિશીલ રીતે સંચાલિત થયેલ છે તે નક્કી કરે છે અથવા શું ત્યા કામ કરવાની "
"જગ્યાની સ્થિર સંખ્યા છે (org."
"gnome.desktop.wm.preferences માં કામ કરવાની જગ્યા દ્દારા નક્કી થયેલ છે)."
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
msgid "Workspaces only on primary"
@@ -456,6 +464,8 @@ msgid ""
"Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor."
msgstr ""
"શું કામ કરવાની જગ્યાને બધા મોનિટર પર વિન્ડો માટે અદલાબદલી થવી જોઇએ અથવા પ્રાથમિક મોનિટર પર "
"ફક્ત વિન્ડો માટે."
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
msgid "No tab popup"
@@ -466,16 +476,19 @@ msgid ""
"Determines whether the use of popup and highlight frame should be disabled "
"for window cycling."
msgstr ""
"શું પોપઅપ અને પ્રકાશિત ફ્રેમનો વપરાશ વિન્ડો સાયકલીંગ માટે નિષ્ક્રિય થવુ જોઇએ તે નક્કી કરે છે."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Draggable border width"
msgstr ""
msgstr "ખેંચી શકાય તેવી સીમા પહોળાઇ"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
msgstr ""
"કુલ ખેંચી શકાય તેવી સીમાઓની સંખ્યા. જો થીમની દૃશ્યમાન સીમાઓ પૂરતી નથી, અદૃશ્ય સીમાઓ આ કિંમતને "
"મેળવવા માટે ઉમેરાશે."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Select window from tab popup"
@@ -731,7 +744,7 @@ msgid "Gradients should have at least two colors"
msgstr "ઢાળમાં ઓછામાં ઓછા બે રંગ હોવા જોઈએ"
#: ../src/ui/theme.c:1201
#, fuzzy, c-format
#, c-format
#| msgid ""
#| "GTK color specification must have a close bracket after the state, e.g. "
#| "gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
@@ -739,8 +752,8 @@ msgid ""
"GTK custom color specification must have color name and fallback in "
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
msgstr ""
"GTK રંગના સ્પષ્ટીકરણમાં સ્થિતિ પછી કૌંસ બંધ થવો જોઈએ દા.ત. gtk:fg[NORMAL] જ્યાં "
"NORMAL સ્થિતિ છે; \"%s\" ન પદચ્છેદ કરી શકાય નહિં"
"GTK વૈવિધ્ય રંગના સ્પષ્ટીકરણનું રંગ નામ હોવુ જ જોઇએ અને સ્થિતિ પછી કૌંસ બંધ થવો જોઈએ દા.ત. "
"gtk:custom(foo,bar); \"%s\" નું પદચ્છેદ કરી શકાય નહિં"
#: ../src/ui/theme.c:1217
#, c-format

2787
po/hi.po

File diff suppressed because it is too large Load Diff

View File

@@ -8,18 +8,18 @@
# Andika Triwidada <andika@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: metacity HEAD\n"
"Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-08-16 07:42+0000\n"
"PO-Revision-Date: 2012-08-13 15:28+0700\n"
"Last-Translator: Dirgita <dirgitadevina@yahoo.co.id>\n"
"POT-Creation-Date: 2012-10-16 12:48+0000\n"
"PO-Revision-Date: 2012-10-16 23:40+0700\n"
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
"Language-Team: Indonesian <gnome@i15n.org>\n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 1.2\n"
"X-Generator: Poedit 1.5.4\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../src/50-mutter-windows.xml.in.h:1
@@ -53,36 +53,36 @@ msgstr "Bel peristiwa"
msgid "Unknown window information request: %d"
msgstr "Permintaan informasi jendela tak dikenal: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:111
#, c-format
msgid "%s is not responding."
msgstr "%s tak merespon."
msgid "%s is not responding."
msgstr "\"%s\" tak merespon."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:113
msgid "Application is not responding."
msgstr "Aplikasi tak merespon."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:118
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Anda bisa memilih untuk menunggu sebentar atau memaksa aplikasi keluar."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Wait"
msgstr "_Tunggu"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Force Quit"
msgstr "_Matikan Paksa"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Kehilangan ekstensi %s yang diperlukan untuk pengkomposisian"
#: ../src/core/display.c:446
#: ../src/core/display.c:493
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Gagal membuka tampilan X Window System '%s'\n"
@@ -153,7 +153,7 @@ msgstr "Cetak versi"
msgid "Mutter plugin to use"
msgstr "Pengaya Mutter yang dipakai"
#: ../src/core/prefs.c:1071
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -161,12 +161,12 @@ msgstr ""
"Pencegahan kesalahan bagi aplikasi yang rusak sedang dinonaktifkan. Mungkin "
"nanti ada beberapa aplikasi yang akan bertingkah aneh.\n"
#: ../src/core/prefs.c:1146
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Tak dapat mengurai deskripsi fonta \"%s\" dari kunci GSettings %s\n"
#: ../src/core/prefs.c:1212
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -175,7 +175,7 @@ msgstr ""
"\"%s\" yang ada pada database konfigurasi bukanlah nilai yang benar untuk "
"tombol mouse.\n"
#: ../src/core/prefs.c:1736
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -184,7 +184,7 @@ msgstr ""
"\"%s\" yang ada pada database konfigurasi bernilai tidak benar untuk "
"kombinasi tombol \"%s\"\n"
#: ../src/core/prefs.c:1833
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Area kerja %d"
@@ -313,7 +313,7 @@ msgid "Window manager error: "
msgstr "Eror pengatur jendela: "
#. first time through
#: ../src/core/window.c:7234
#: ../src/core/window.c:7237
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -329,7 +329,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7899
#: ../src/core/window.c:7902
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -339,22 +339,22 @@ msgstr ""
"ukurannya, sedangkan ukuran minimalnya adalah %d x %d dan maksimal %d x %d "
"yang tidak masuk di akal.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Aplikasi telah membuat _NET_WM_PID %lu bohongan\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (pada %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "WM_TRANSIENT_FOR salah jendela 0x%lx ditentukan untuk %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "Jendela WM_TRANSIENT_FOR 0x%lx untuk %s akan membuat loop.\n"
@@ -473,10 +473,24 @@ msgstr ""
"perputaran jendela."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Tunda perubahan fokus sampai penunjuk berhenti bergerak"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Bila diisi dengan true, dan mode fokus adalah \"sloppy\" atau \"mouse\" maka "
"fokus tak akan berubah seketika saat memasuki suatu jendela, tapi hanya "
"setelah penunjuk berhenti bergerak."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Lebar batas yang dapat diseret"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -484,11 +498,11 @@ msgstr ""
"Total banyaknya tepi yang dapat diseret. Bila tepi tema yang nampak tak "
"cukup, tepi tak nampak akan ditambahkan untuk memenuhi nilai ini."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Pilih jendela dari popup tab"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Batalkan popup tab"
@@ -1564,4 +1578,3 @@ msgstr "nilai y sebelumnya %d, padahal seharusnya %d"
#, c-format
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr "ekspresi koordinat %d diambil dalam %g detik (rata-rata %g detik)\n"

673
po/ja.po

File diff suppressed because it is too large Load Diff

441
po/kn.po

File diff suppressed because it is too large Load Diff

View File

@@ -18,8 +18,8 @@ msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-08-06 23:35+0000\n"
"PO-Revision-Date: 2012-09-15 18:04+0900\n"
"POT-Creation-Date: 2012-10-11 14:32+0000\n"
"PO-Revision-Date: 2012-10-13 18:52+0900\n"
"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
"Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n"
"Language: Korean\n"
@@ -60,40 +60,40 @@ msgstr "삑소리 이벤트"
msgid "Unknown window information request: %d"
msgstr "알 수 없는 창 정보 요청: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:113
#, c-format
msgid "%s is not responding."
msgstr "%s 창이 반응하지 않습니다."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:117
msgid "Application is not responding."
msgstr "프로그램이 반응하지 않습니다."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:122
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr "좀 더 기다리거나 해당 프로그램을 강제로 끝낼 수 있습니다."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Wait"
msgstr "기다리기(_W)"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Force Quit"
msgstr "강제로 끝내기(_F)"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "콤포짓에 필요한 %s 확장 기능이 없습니다"
#: ../src/core/display.c:446
#: ../src/core/display.c:492
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "X 윈도 시스템 디스플레이 '%s'을(를) 여는데 실패하였습니다\n"
#: ../src/core/keybindings.c:844
#: ../src/core/keybindings.c:853
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@@ -162,7 +162,7 @@ msgstr "버전을 출력합니다"
msgid "Mutter plugin to use"
msgstr "사용할 머터 플러그인"
#: ../src/core/prefs.c:1065
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -170,12 +170,12 @@ msgstr ""
"응용 프로그램에 대한 임시 방편을 막았습니다. 몇몇 응용프로그램들이 제대로 동"
"작하지 않을것입니다.\n"
#: ../src/core/prefs.c:1140
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "GSettings 키 %2$s에서 글꼴 지정 \"%1$s\"을(를) 분석할 수 없습니다\n"
#: ../src/core/prefs.c:1206
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -184,7 +184,7 @@ msgstr ""
"설정 데이터베이스에서 찾은 \"%s\"이(가) 마우스 단추 변경 키의 올바른 값이 아"
"닙니다\n"
#: ../src/core/prefs.c:1724
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -193,7 +193,7 @@ msgstr ""
"설정 데이터베이스에서 찾은 \"%s\"이(가) 단축키 \"%s\"에 대한 올바른 값이 아닙"
"니다\n"
#: ../src/core/prefs.c:1821
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "작업 공간 %d"
@@ -321,7 +321,7 @@ msgid "Window manager error: "
msgstr "장 관리자 오류: "
#. first time through
#: ../src/core/window.c:7234
#: ../src/core/window.c:7237
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -337,7 +337,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7899
#: ../src/core/window.c:7902
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -346,23 +346,23 @@ msgstr ""
"%s 창에서 크기 변경이 불가능하다는 MWM 힌트를 설정했지만, 최소 크기 %d x %d "
"및 최대 크기 %d x %d(으)로 설정했습니다. 앞뒤가 맞지 않습니다.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "응용 프로그램이 가짜 _NET_WM_PID %lu을(를) 설정하였습니다\n"
# <창제목> (on <기계>)
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (%s에서)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "%2$s에 대해 WM_TRANSIENT_FOR 0x%1$lx 창이 잘못되었습니다.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "%2$s에 대해 WM_TRANSIENT_FOR 0x%1$lx 창은 무한 반복입니다.\n"
@@ -480,10 +480,21 @@ msgstr ""
"팝업 및 강조 프레임을 창 전환 목록에 사용하지 않게 만들지 여부를 결정합니다."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "포인터가 움직임을 멈출 때까지 포커스 전환 미루기"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr "참이고 포커스 모드가 \"sloppy\"나 \"mouse\"인 경우, 창 안에 포인터를 옮겼을 때 즉시 포커스를 전환하지 않고, 포인터가 움직임을 멈추었을 때 전환합니다."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "마우스로 끌 수 있는 가장자리의 너비"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -491,11 +502,11 @@ msgstr ""
"마우스로 끌 수 있는 가장자리의 너비. 테마의 가장자리가 이보다 작은 경우, 투명"
"한 가장자리가 부족한 양만큼 추가됩니다."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "탭 팝업에서 창 선택"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "탭 팝업 취소"
@@ -1268,19 +1279,25 @@ msgstr "스타일에 상태 %s 포커스 %s에 대해 이미 지정되어 있습
msgid ""
"Can't have a two draw_ops for a <piece> element (theme specified a draw_ops "
"attribute and also a <draw_ops> element, or specified two elements)"
msgstr "<piece> 엘리먼트에 두개의 draw_ops를 가질수 없습니다(테마에 draw_ops 속성과 <draw_ops> 엘리먼트를 지정했거나 두 엘리먼트를 지정했습니다"
msgstr ""
"<piece> 엘리먼트에 두개의 draw_ops를 가질수 없습니다(테마에 draw_ops 속성과 "
"<draw_ops> 엘리먼트를 지정했거나 두 엘리먼트를 지정했습니다"
#: ../src/ui/theme-parser.c:3332
msgid ""
"Can't have a two draw_ops for a <button> element (theme specified a draw_ops "
"attribute and also a <draw_ops> element, or specified two elements)"
msgstr "<button> 엘리먼트에 두개의 draw_ops를 가질수 없습니다(테마에 draw_ops 속성과 <draw_ops> 엘리먼트를 지정했거나 두 엘리먼트를 지정했습니다"
msgstr ""
"<button> 엘리먼트에 두개의 draw_ops를 가질수 없습니다(테마에 draw_ops 속성과 "
"<draw_ops> 엘리먼트를 지정했거나 두 엘리먼트를 지정했습니다"
#: ../src/ui/theme-parser.c:3370
msgid ""
"Can't have a two draw_ops for a <menu_icon> element (theme specified a "
"draw_ops attribute and also a <draw_ops> element, or specified two elements)"
msgstr "<menu_icon> 엘리먼트에 두개의 draw_ops를 가질수 없습니다(테마에 draw_ops 속성과 <draw_ops> 엘리먼트를 지정했거나 두 엘리먼트를 지정했습니다"
msgstr ""
"<menu_icon> 엘리먼트에 두개의 draw_ops를 가질수 없습니다(테마에 draw_ops 속성"
"과 <draw_ops> 엘리먼트를 지정했거나 두 엘리먼트를 지정했습니다"
#: ../src/ui/theme-parser.c:3434
#, c-format
@@ -1518,7 +1535,10 @@ msgid ""
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
"seconds wall clock time including X server resources (%g milliseconds per "
"frame)\n"
msgstr "%d개 프레임을 그리는 데 클라이언트 입장에서 %g초가 걸렸습니다(한 프레임에 %g ms). 그리고 X 서버 리소스까지 포함해 실제 시간으로 %g 초가 걸렸습니다(한 프레임에 %g ms).\n"
msgstr ""
"%d개 프레임을 그리는 데 클라이언트 입장에서 %g초가 걸렸습니다(한 프레임에 %g "
"ms). 그리고 X 서버 리소스까지 포함해 실제 시간으로 %g 초가 걸렸습니다(한 프레"
"임에 %g ms).\n"
#: ../src/ui/theme-viewer.c:1266
msgid "position expression test returned TRUE but set error"

View File

@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: lt\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-08-06 23:35+0000\n"
"PO-Revision-Date: 2012-09-01 22:57+0300\n"
"POT-Creation-Date: 2012-10-11 14:32+0000\n"
"PO-Revision-Date: 2012-10-13 22:54+0300\n"
"Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n"
"Language-Team: Lithuanian <gnome-lt@lists.akl.lt>\n"
"Language: lt\n"
@@ -48,39 +48,38 @@ msgstr "Skambučio įvykis"
msgid "Unknown window information request: %d"
msgstr "Nežinoma langų informacijos užklausa: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:113
#, c-format
#| msgid "<tt>%s</tt> is not responding."
msgid "%s is not responding."
msgstr "%s neatsiliepia į komandas."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:117
msgid "Application is not responding."
msgstr "Programa neatsiliepia į komandas."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:122
msgid "You may choose to wait a short while for it to continue or force the application to quit entirely."
msgstr "Galite šiek tiek palaukti arba priverstinai uždaryti programą."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Wait"
msgstr "_Laukti"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Force Quit"
msgstr "_Priverstinai išeiti"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Trūksta %s priedo, reikalingo komponavimui"
#: ../src/core/display.c:446
#: ../src/core/display.c:492
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Nepavyko atverti X Window sistemos ekrano „%s“\n"
#: ../src/core/keybindings.c:844
#: ../src/core/keybindings.c:853
#, c-format
msgid "Some other program is already using the key %s with modifiers %x as a binding\n"
msgstr "Kažkokia kita programa jau naudoja %s klavišą su modifikatoriais %x kaip susiejimą\n"
@@ -139,30 +138,29 @@ msgid "Print version"
msgstr "Parodyti versiją"
#: ../src/core/mutter.c:60
#| msgid "Clutter Plugins"
msgid "Mutter plugin to use"
msgstr "Naudojamas Mutter įskiepis"
#: ../src/core/prefs.c:1065
#: ../src/core/prefs.c:1079
msgid "Workarounds for broken applications disabled. Some applications may not behave properly.\n"
msgstr "Apsauga nuo sugadintų programų atjungta. Kai kurios programos gali pradėti keistai elgtis.\n"
#: ../src/core/prefs.c:1140
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Nepavyko perskaityti šrifto aprašymo „%s“ saugomo GSettings rakte %s\n"
#: ../src/core/prefs.c:1206
#: ../src/core/prefs.c:1220
#, c-format
msgid "\"%s\" found in configuration database is not a valid value for mouse button modifier\n"
msgstr "„%s“ reikšmė rasta nustatymų duomenų bazėje yra netinkama pelės mygtuko keitiklio aprašymui\n"
#: ../src/core/prefs.c:1724
#: ../src/core/prefs.c:1747
#, c-format
msgid "\"%s\" found in configuration database is not a valid value for keybinding \"%s\"\n"
msgstr "„%s“ reikšmė rasta konfiguracijos duomenų bazė yra netinkama klavišų kombinacijai „%s“\n"
#: ../src/core/prefs.c:1821
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Darbalaukis %d"
@@ -284,7 +282,7 @@ msgid "Window manager error: "
msgstr "Langų valdyklės klaida:"
#. first time through
#: ../src/core/window.c:7234
#: ../src/core/window.c:7237
#, c-format
msgid "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER window as specified in the ICCCM.\n"
msgstr "Langas %s nustatė SM_CLIENT_ID kintamajį į save patį vietoj to, kad nustatytų jį į WM_CLIENT_LEADER langą kaip nurodo ICCCM..\n"
@@ -296,27 +294,27 @@ msgstr "Langas %s nustatė SM_CLIENT_ID kintamajį į save patį vietoj to, kad
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7899
#: ../src/core/window.c:7902
#, c-format
msgid "Window %s sets an MWM hint indicating it isn't resizable, but sets min size %d x %d and max size %d x %d; this doesn't make much sense.\n"
msgstr "Langas %s nustatė MWM požymį teigdamas, kad jo dydis nėra kintamas, tačiau tuo pat metu nustatė ir leistinas mažiausio dydžio %d x %d bei didžiausio dydžio %d x %d reikšmes; tai yra beprasmiška.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Programa nustatė netinkamą _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (kompiuteryje %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Nekorektiškas WM_TRANSIENT_FOR langas 0x%lx nurodytas %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR langas 0x%lx nurodytas %s sukurtų ciklą.\n"
@@ -400,18 +398,26 @@ msgid "Determines whether the use of popup and highlight frame should be disable
msgstr "Nusako, ar iššokančio lango ir rėmelio paryškinimo naudojimas turėtų būti išjungtas langų perėjime."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Atidėti aktyvavimo pakeitimus iki žymiklis nustaja judėti"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then the focus will not be changed immediately when entering a window, but only after the pointer stops moving."
msgstr "Jei nustatytas teigiamai ir aktyvavimo veiksena yra „sloppy“ arba „mouse“, tuomet aktyvavimas nebus pakeistas nedelsiant įėjus į langą, bet tik pelės žymikliui nustojus judėti."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Tempiamos paraštės prolis"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid "The amount of total draggable borders. If the theme's visible borders are not enough, invisible borders will be added to meet this value."
msgstr "Bendros tempiamos paraštės dydis. Jei temos matomos paraštės yra nepakankamos, bus pridėtos nematomos paraštės."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Pasirinkti langą iš tab iššokimo"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Atšaukti tab iššokimą"

880
po/lv.po

File diff suppressed because it is too large Load Diff

4470
po/ml.po

File diff suppressed because it is too large Load Diff

154
po/mr.po
View File

@@ -9,20 +9,19 @@ msgstr ""
"Project-Id-Version: metacity.gnome-2-26.mr\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-07-15 00:47+0000\n"
"PO-Revision-Date: 2012-08-17 10:16+0530\n"
"POT-Creation-Date: 2012-10-11 14:32+0000\n"
"PO-Revision-Date: 2012-10-15 11:11+0530\n"
"Last-Translator: Sandeep Shedmake <sshedmak@redhat.com>\n"
"Language-Team: Marathi <maajhe-sanganak@freelists.org>\n"
"Language: mr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 1.4\n"
"X-Generator: Lokalize 1.5\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"\n"
#: ../src/50-mutter-windows.xml.in.h:1
#| msgid "/_Windows"
msgid "Windows"
msgstr "पटल"
@@ -38,8 +37,6 @@ msgstr "उजवीकडील विभाजनचे अवलोकन"
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:492
#, c-format
#| msgid ""
#| "Could not acquire window manager selection on screen %d display \"%s\"\n"
msgid ""
"Another compositing manager is already running on screen %i on display \"%s"
"\"."
@@ -56,18 +53,16 @@ msgstr "बेल इव्हेंट"
msgid "Unknown window information request: %d"
msgstr "अपरिचीत चौकट माहिती विनंती: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:113
#, c-format
#| msgid "\"%s\" is not responding."
msgid "%s is not responding."
msgstr "%s प्रतिसाद देत नाही."
#: ../src/core/delete.c:118
#| msgid "\"%s\" is not responding."
#: ../src/core/delete.c:117
msgid "Application is not responding."
msgstr "ॲप्लिकेशन प्रतिसाद देत नाही."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:122
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@@ -76,25 +71,25 @@ msgstr ""
"बाहेर "
"पडण्याकरीता विनंतीकृत करू शखता."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Wait"
msgstr "वाट पहा(_W)"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Force Quit"
msgstr "जबरन बाहेर पडा (_F)"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "एकत्रीकरण करीता आवश्यक %s विस्तार आढळले नाही"
#: ../src/core/display.c:446
#: ../src/core/display.c:492
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "X चौकट प्रणाली दृश्य '%s' उघडण्यास अपयशी\n"
#: ../src/core/keybindings.c:844
#: ../src/core/keybindings.c:853
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@@ -108,7 +103,6 @@ msgid "Disable connection to session manager"
msgstr "सत्र व्यवस्थपानशी जुळवणी अकार्यान्वती करा"
#: ../src/core/main.c:202
#| msgid "Replace the running window manager with Metacity"
msgid "Replace the running window manager"
msgstr "कार्यरत पटल व्यवस्थापकशी अदलाबदल करा"
@@ -144,12 +138,6 @@ msgstr ""
#: ../src/core/mutter.c:40
#, c-format
#| msgid ""
#| "metacity %s\n"
#| "Copyright (C) 2001-2008 Havoc Pennington, Red Hat, Inc., and others\n"
#| "This is free software; see the source for copying conditions.\n"
#| "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
#| "PARTICULAR PURPOSE.\n"
msgid ""
"mutter %s\n"
"Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
@@ -171,7 +159,7 @@ msgstr "मुद्रण आवृत्ती"
msgid "Mutter plugin to use"
msgstr "वापरण्याजोगी Mutter प्लगइन"
#: ../src/core/prefs.c:1065
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -180,13 +168,12 @@ msgstr ""
"वागणून "
"योग्यरित्या आढळणार नाही\n"
#: ../src/core/prefs.c:1140
#: ../src/core/prefs.c:1154
#, c-format
#| msgid "Could not parse font description \"%s\" from GConf key %s\n"
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "GSettings कि %2$s पासून फाँट वर्णन \"%1$s\" वाचणे अशक्य\n"
#: ../src/core/prefs.c:1206
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -194,7 +181,7 @@ msgid ""
msgstr ""
"माउस बटन संपादक करीता संयोजना माहितीकोश मध्ये आढळलेले \"%s\" वैध मुल्य नाही\n"
#: ../src/core/prefs.c:1724
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -203,7 +190,7 @@ msgstr ""
"keybinding \"%2$s\" करीता संयोजना माहितीकोश मध्ये आढळलेले \"%1$s\" वैध मुल्य "
"नाही\n"
#: ../src/core/prefs.c:1821
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "कार्यक्षेत्र %d"
@@ -268,7 +255,6 @@ msgstr "संचयीत सत्र फाइल वाचण्यास
#: ../src/core/session.c:1185
#, c-format
#| msgid "<metacity_session> attribute seen but we already have the session ID"
msgid "<mutter_session> attribute seen but we already have the session ID"
msgstr "<mutter_session> गुणधर्म आढळले परंतु सत्र ID आधिपासून अस्तित्वात आहे"
@@ -290,15 +276,13 @@ msgid "Unknown element %s"
msgstr "अपरिचीत घटक %s"
#: ../src/core/session.c:1809
#| msgid ""
#| "These windows do not support \"save current setup\" and will have to be "
#| "restarted manually next time you log in."
msgid ""
"These windows do not support &quot;save current setup&quot; and will have to "
"be restarted manually next time you log in."
msgstr ""
"हे पटल &quot;सध्याचे सेटअप साठवा&quot; करीता समर्थन पुरवत नाही व पुढच्यावेळी "
"प्रवेश करताना स्वहस्तेरित्या सुरू करावे लागेल."
"प्रवेश "
"करताना स्वहस्तेरित्या सुरू करावे लागेल."
#: ../src/core/util.c:80
#, c-format
@@ -317,7 +301,6 @@ msgstr "लॉग फाइल %s उघडली\n"
#: ../src/core/util.c:115 ../src/tools/mutter-message.c:149
#, c-format
#| msgid "Metacity was compiled without support for verbose mode\n"
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "वर्बोस् मोडकरीता समर्थनविना Mutter कंपाइल केले\n"
@@ -364,24 +347,23 @@ msgstr ""
"किमान आकार %d "
"x %d व कमाल आकार %d x %d; निश्चित करते ज्याचा जास्त अर्थ दिसून येत नाही.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "अनुप्रयोग फरजी _NET_WM_PID %lu निश्चित करा\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%1$s (%2$s वर)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "%2$s करीता अवैध WM_TRANSIENT_FOR window 0x%1$lx निश्चित केले गेले.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
#| msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR पटल 0x%lx, %s करीता लूप निर्माण करेल.\n"
@@ -418,7 +400,6 @@ msgid "Mutter"
msgstr "मुटर"
#: ../src/org.gnome.mutter.gschema.xml.in.h:1
#| msgid "Modifier to use for modified window click actions"
msgid "Modifier to use for extended window management operations"
msgstr "वाढिव पटल व्यवस्थापन कार्यांकरीता वापरण्याजोगी मॉडिफायर"
@@ -430,9 +411,10 @@ msgid ""
"default or set to the empty string."
msgstr ""
"हि कि \"overlay\" सुरू करतो, जे पटल पुनरावलोकन व ॲप्लिकेशन सुरू करण्यासाठीची "
"प्रणाली आहे. "
"पूर्वनिर्धारित PC हार्डवेअरवरील \"Windows key\" आहे. असे अपेक्षित आहे कि हि "
"बाइंडिंग एकतर पूर्वनिर्धारित किंवा रिकामी स्ट्रिंगकरीता निश्चित केली आहे."
"प्रणाली "
"आहे. पूर्वनिर्धारित PC हार्डवेअरवरील \"Windows key\" आहे. असे अपेक्षित आहे कि "
"हि बाइंडिंग "
"एकतर पूर्वनिर्धारित किंवा रिकामी स्ट्रिंगकरीता निश्चित केली आहे."
#: ../src/org.gnome.mutter.gschema.xml.in.h:3
msgid "Attach modal dialogs"
@@ -445,7 +427,8 @@ msgid ""
"the parent window."
msgstr ""
"खरे असल्यास, स्वतंत्र शीर्षकपट्टी ऐवजी, पॅरेंट पटलाशी जोडलेल्या शीर्षकपट्टीसह "
"मोडल संवाद आढळतात व पॅरेंट पटलासह एकत्रपणे स्थानांतरीत केले जातात."
"मोडल संवाद "
"आढळतात व पॅरेंट पटलासह एकत्रपणे स्थानांतरीत केले जातात."
#: ../src/org.gnome.mutter.gschema.xml.in.h:5
msgid "Enable edge tiling when dropping windows on screen edges"
@@ -458,8 +441,10 @@ msgid ""
"area. Dropping windows on the top screen edge maximizes them completely."
msgstr ""
"सुरू असल्यास, उभी स्क्रीन किनाऱ्यांवर पटल स्थिती केल्यास उभ्यादिशेना वाढवते व "
"उपलब्ध क्षेत्राचे अर्धे भाग समाविष्ट करायचे असल्यास आडवेरित्या पुनःआकार देते. "
"शीर्ष पडद्यावरील किनारवर पटल स्थित केल्यास त्यांना पूर्णपणे वाढवतो."
"उपलब्ध "
"क्षेत्राचे अर्धे भाग समाविष्ट करायचे असल्यास आडवेरित्या पुनःआकार देते. शीर्ष "
"पडद्यावरील "
"किनारवर पटल स्थित केल्यास त्यांना पूर्णपणे वाढवतो."
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
msgid "Workspaces are managed dynamically"
@@ -472,8 +457,8 @@ msgid ""
"gnome.desktop.wm.preferences)."
msgstr ""
"वर्कस्पेसेस् गतियरित्या व्यवस्थापीत केले जातात किंवा वर्कस्पेस्ची एकूण संख्या "
"ओळखतो (org.gnome.desktop.wm.preferences मध्ये num-workspaces कितर्फे ओळखले "
"जाते)."
"ओळखतो (org.gnome."
"desktop.wm.preferences मध्ये num-workspaces कितर्फे ओळखले जाते)."
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
msgid "Workspaces only on primary"
@@ -499,23 +484,42 @@ msgstr ""
"पॉपअपचा वापर व विंडो सायकलिंगकरीता फ्रेम ठळक करणे अशक्य करायचे, हे ओळखतो."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "पॉइंटरचे हलणे थांबेपर्यंत फोकस बदलमध्ये विलंब करा"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#| msgid ""
#| "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
#| "the focused window will be automatically raised after a delay specified "
#| "by the auto_raise_delay key. This is not related to clicking on a window "
#| "to raise it, nor to entering a window during drag-and-drop."
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"true असल्यास, व फोकस मोड एकतर \"sloppy\" किंवा \"mouse\" असल्यास पटलमध्ये "
"प्रवेश करतेवेळी फोकस पटकन बदलणार नाही, पॉइंटरचे हलणे थांबल्यावरच फोकसचे बदल "
"शक्य आहे."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "ओढण्याजोगी किनार रूंदी"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
msgstr ""
"एकूण ओढण्याजोगी किनारची संख्या. सुत्रयोजनाचे दृष्यास्पद किनार अतिरिक्त "
"नसल्यास, ह्या मूल्याशी जुळणीकरीता छुपे किनार समाविष्ट केले जाईल."
"नसल्यास, ह्या "
"मूल्याशी जुळणीकरीता छुपे किनार समाविष्ट केले जाईल."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#| msgid "Remove Window From Top"
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "टॅब पॉपअपपासून पटल नीवडा"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "टॅब पॉपअप रद्द करा"
@@ -614,7 +618,7 @@ msgstr "Workspace %d%n"
#: ../src/ui/menu.c:214
#, c-format
msgid "Workspace 1_0"
msgstr "कार्यक्षेत्र १०(_0)"
msgstr "कार्यक्षेत्र 10 (_0)"
#: ../src/ui/menu.c:216
#, c-format
@@ -766,15 +770,13 @@ msgstr "चढानी कमीत कमी दोन रंग हवेत"
#: ../src/ui/theme.c:1201
#, c-format
#| msgid ""
#| "GTK color specification must have a close bracket after the state, e.g. "
#| "gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
msgid ""
"GTK custom color specification must have color name and fallback in "
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
msgstr ""
"GTK पसंतीचे रंग निर्देशनामध्ये कंसात रंगाचे नाव व फॉलबॅक असणे आवश्यक आहे, "
"उ.दा. gtk:custom(foo,bar); \"%s\"ला वाचण्यास अशक्य आहे"
"उ.दा. gtk:custom"
"(foo,bar); \"%s\"ला वाचण्यास अशक्य आहे"
#: ../src/ui/theme.c:1217
#, c-format
@@ -782,20 +784,18 @@ msgid ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
"_ are valid"
msgstr ""
"अवैध अक्षर '%c' मध्ये gtk:custom चे color_name घटक आढळले, फक्त A-Za-z0-9-"
"_ वैध आहे"
"अवैध अक्षर '%c' मध्ये gtk:custom चे color_name घटक आढळले, फक्त A-Za-z0-9-_ "
"वैध आहे"
#: ../src/ui/theme.c:1231
#, c-format
#| msgid ""
#| "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the "
#| "format"
msgid ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
"fit the format"
msgstr ""
"Gtk:custom रूपण \"gtk:custom(color_name,fallback)\" असे आहे, \"%s\" या "
"रूपणमध्ये बसत नाही"
"रूपणमध्ये "
"बसत नाही"
#: ../src/ui/theme.c:1276
#, c-format
@@ -1393,7 +1393,6 @@ msgstr "गुमधर्मामध्ये वाक्यरचना अ
#: ../src/ui/theme-parser.c:4050 ../src/ui/theme-parser.c:4062
#: ../src/ui/theme-parser.c:4074
#, c-format
#| msgid "<name> specified twice for this theme"
msgid "<%s> specified twice for this theme"
msgstr "<%s> या सुत्रयोजनेकरीता दोनवेळा निर्देशीत केले"
@@ -1403,57 +1402,46 @@ msgid "Failed to find a valid file for theme %s\n"
msgstr "सुत्रयोजना %s करीता वैध फाइल शोधण्यास अपयशी\n"
#: ../src/ui/theme-viewer.c:99
#| msgid "/_Windows"
msgid "_Windows"
msgstr "पटल (_W)"
#: ../src/ui/theme-viewer.c:100
#| msgid "Dialog Box"
msgid "_Dialog"
msgstr "संवाद (_D)"
#: ../src/ui/theme-viewer.c:101
#| msgid "Modal Dialog Box"
msgid "_Modal dialog"
msgstr "मोडल संवाद (_M)"
#: ../src/ui/theme-viewer.c:102
#| msgid "/Windows/_Utility"
msgid "_Utility"
msgstr "युटिलिटि (_U)"
#: ../src/ui/theme-viewer.c:103
#| msgid "/Windows/_Splashscreen"
msgid "_Splashscreen"
msgstr "स्प्लॅशस्क्रीन (_S)"
#: ../src/ui/theme-viewer.c:104
#| msgid "/Windows/_Top dock"
msgid "_Top dock"
msgstr "टॉप डॉक (_T)"
#: ../src/ui/theme-viewer.c:105
#| msgid "/Windows/_Bottom dock"
msgid "_Bottom dock"
msgstr "तळ डॉक (_B)"
#: ../src/ui/theme-viewer.c:106
#| msgid "/Windows/_Left dock"
msgid "_Left dock"
msgstr "डावा डॉक (_L)"
#: ../src/ui/theme-viewer.c:107
#| msgid "/Windows/_Right dock"
msgid "_Right dock"
msgstr "उजवा डॉक (_R)"
#: ../src/ui/theme-viewer.c:108
#| msgid "/Windows/_All docks"
msgid "_All docks"
msgstr "सर्व डॉक्स् (_A)"
#: ../src/ui/theme-viewer.c:109
#| msgid "Desktop"
msgid "Des_ktop"
msgstr "डेस्कटॉप (_k)"
@@ -1511,7 +1499,6 @@ msgid "Border"
msgstr "किनार"
#: ../src/ui/theme-viewer.c:406
#| msgid "Modal Dialog Box"
msgid "Attached Modal Dialog"
msgstr "मोडल संवाद जोडले"
@@ -2113,17 +2100,6 @@ msgstr ""
#~ msgid "Enable Visual Bell"
#~ msgstr "दृश्य घंटा सक्षम करा"
#~ msgid ""
#~ "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
#~ "the focused window will be automatically raised after a delay specified "
#~ "by the auto_raise_delay key. This is not related to clicking on a window "
#~ "to raise it, nor to entering a window during drag-and-drop."
#~ msgstr ""
#~ "खरे निश्चित केल्यास, व लक्ष्यकेंद्र पध्दती एकतर \"गचाळ\" किंवा \"माउस\" असल्यास "
#~ "लक्ष्यकेंद्रीय चौकट आपोआप स्व_वाढ_उशीर किल्ली द्वारे निश्चित उशीर नंतर दृश्यीस केले "
#~ "जाईल. हे चौकटवर क्लिक केल्यास चौकट दर्शविण्याकरीता समान नाही, व ओढा-व-टाकावेळी "
#~ "चौकट दाखलन समान देखिल नाही."
#~ msgid ""
#~ "If true, ignore the titlebar_font option, and use the standard "
#~ "application font for window titles."

View File

@@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
"Project-Id-Version: mutter 3.5.x\n"
"Project-Id-Version: mutter 3.6.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-07-25 16:30+0200\n"
"PO-Revision-Date: 2012-07-25 16:30+0200\n"
"POT-Creation-Date: 2012-10-22 19:51+0200\n"
"PO-Revision-Date: 2012-10-22 19:52+0200\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-no@lister.ping.uio.no>\n"
"Language: \n"
@@ -45,16 +45,16 @@ msgstr "Klokkehendelse"
msgid "Unknown window information request: %d"
msgstr "Ukjent forespørsel om vindusinformasjon: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:111
#, c-format
msgid "%s is not responding."
msgstr "%s svarer ikke."
msgid "%s is not responding."
msgstr "«%s» svarer ikke."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:113
msgid "Application is not responding."
msgstr "Programmet svarer ikke."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:118
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@@ -62,25 +62,25 @@ msgstr ""
"Du kan velge å vente en kort stund for å se om det fortsetter eller tvinge "
"programmet til å avslutte helt."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Wait"
msgstr "_Vent"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Force Quit"
msgstr "_Tvungen nedstenging"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Mangler utvidelsen %s som kreves for komposittfunksjon"
#: ../src/core/display.c:446
#: ../src/core/display.c:493
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Feil under åpning av X Window System skjerm «%s»\n"
#: ../src/core/keybindings.c:844
#: ../src/core/keybindings.c:853
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@@ -148,7 +148,7 @@ msgstr "Skriv versjonsnummer"
msgid "Mutter plugin to use"
msgstr "Mutter-tillegg som skal brukes"
#: ../src/core/prefs.c:1065
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -156,12 +156,12 @@ msgstr ""
"Funksjonalitet for å gå rundt ødelagte programmer er deaktivert. Noen "
"programmer vil kanskje ikke oppføre seg korrekt.\n"
#: ../src/core/prefs.c:1140
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Kunne ikke tolke skriftbeskrivelsen «%s» fra GSettings-nøkkel %s\n"
#: ../src/core/prefs.c:1206
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -170,7 +170,7 @@ msgstr ""
"«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for endring av "
"musknapp\n"
#: ../src/core/prefs.c:1724
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -179,7 +179,7 @@ msgstr ""
"«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for "
"tastaturbinding «%s»\n"
#: ../src/core/prefs.c:1821
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Arbeidsområde %d"
@@ -307,7 +307,7 @@ msgid "Window manager error: "
msgstr "Feil i vindushåndterer: "
#. first time through
#: ../src/core/window.c:7234
#: ../src/core/window.c:7237
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -323,7 +323,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7899
#: ../src/core/window.c:7902
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -333,22 +333,22 @@ msgstr ""
"men setter minste størrelse %d x %d og maks størrelse %d x %d; dette virker "
"ikke fornuftig.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Programmet satte en feil _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (på %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Ugyldig WM_TRANSIENT_FOR vindu 0x%lx oppgitt for %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR vindu 0x%lx for %s ville skapt en løkke.\n"
@@ -469,10 +469,21 @@ msgstr ""
"mellom vinduer."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Utsett fokusendringer til pekeren slutter å bevege seg"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Bredde på drakant"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -480,11 +491,11 @@ msgstr ""
"Total mengde med drakant. Hvis temas synlige kanter ikke er nok vil usynlige "
"kanter legges til for å imøtekomme denne verdien."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Fjern vindu fra tabulatordialog"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Avbryt tabulatordialog"

View File

@@ -15,8 +15,8 @@ msgid ""
msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-09-08 15:39+0200\n"
"PO-Revision-Date: 2012-09-08 15:40+0200\n"
"POT-Creation-Date: 2012-10-12 19:01+0200\n"
"PO-Revision-Date: 2012-10-12 19:05+0200\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <gnomepl@aviary.pl>\n"
"Language: pl\n"
@@ -59,35 +59,35 @@ msgstr "Zdarzenie sygnału dźwiękowego"
msgid "Unknown window information request: %d"
msgstr "Żądanie nieznanej informacji okna: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:113
#, c-format
msgid "%s is not responding."
msgstr "Okno %s nie odpowiada."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:117
msgid "Application is not responding."
msgstr "Program nie odpowiada."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:122
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr "Można poczekać chwilę dłużej lub wymusić zakończenie programu."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Wait"
msgstr "_Czekaj"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Force Quit"
msgstr "_Zakończ"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Brak rozszerzenia %s, wymaganego przez składanie"
#: ../src/core/display.c:446
#: ../src/core/display.c:492
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr ""
@@ -163,7 +163,7 @@ msgstr "Wyświetla wersję"
msgid "Mutter plugin to use"
msgstr "Używana wtyczka programu Mutter"
#: ../src/core/prefs.c:1071
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -171,14 +171,14 @@ msgstr ""
"Obejścia dla błędnie działających programów są wyłączone. Niektóre z nich "
"mogą się zachowywać w sposób nieprzewidywalny.\n"
#: ../src/core/prefs.c:1146
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr ""
"Nie można przetworzyć opisu czcionki \"%s\", powiązanego z kluczem GSettings "
"%s\n"
#: ../src/core/prefs.c:1212
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -187,7 +187,7 @@ msgstr ""
"Wartość \"%s\", odnaleziona w bazie danych konfiguracji nie opisuje "
"prawidłowo modyfikatora przycisku myszy\n"
#: ../src/core/prefs.c:1736
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -196,7 +196,7 @@ msgstr ""
"Wartość \"%s\", odnaleziona w bazie danych konfiguracji nie opisuje "
"prawidłowo skrótu klawiszowego \"%s\"\n"
#: ../src/core/prefs.c:1833
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Obszar roboczy %d"
@@ -328,7 +328,7 @@ msgid "Window manager error: "
msgstr "Błąd menedżera okien: "
#. first time through
#: ../src/core/window.c:7234
#: ../src/core/window.c:7237
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -344,7 +344,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7899
#: ../src/core/window.c:7902
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -354,23 +354,23 @@ msgstr ""
"niezmienny, lecz jednocześnie ustawia minimalny rozmiar na %d x %d, a "
"maksymalny rozmiar na %d x %d. To nie ma żadnego sensu.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Program ustawił błędną wartość _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (na %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr ""
"Nieprawidłowa wartość WM_TRANSIENT_FOR dla okna 0x%lx określona w %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR okna 0x%lx dla %s utworzyłoby pętlę.\n"
@@ -495,10 +495,24 @@ msgstr ""
"przełączania między oknami."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Opóźnienie zmian aktywności do zatrzymania ruchu kursora"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Jeśli jest ustawione na wartość \"true\", a tryb aktywności to \"sloppy\" "
"lub \"mouse\", to aktywność nie będzie zmieniana od razu po przejściu do "
"okna, ale dopiero po zatrzymaniu ruchu kursora."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Szerokość krawędzi możliwej do przenoszenia"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -507,11 +521,11 @@ msgstr ""
"krawędzie motywu nie są dostateczne, to zostaną dodane niewidoczne "
"krawędzie, aby spełnić tę wartość."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Wybór okna z wyskakującego okna dla tabulacji"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Anulowanie wyskakującego okna dla tabulacji"

View File

@@ -10,16 +10,17 @@
# Rodrigo Flores <rodrigomarquesflores@gmail.com>, 2007.
# Djavan Fagundes <djavanf@gnome.org>, 2008, 2009, 2011.
# Vladimir Melo <vmelo@gnome.org>, 2009.
# Antonio Fernandes C. Neto <fernandes@pelivre.org>, 2010.
# Antonio Fernandes C. Neto <fernandesn@gnome.org>, 2010.
# Rodrigo Padula de Oliveira <contato@rodrigopadula.com>, 2011.
# Enrico Nicoletto <liverig@gmail.com>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: metacity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-09-17 16:25-0400\n"
"PO-Revision-Date: 2012-09-12 09:45-0300\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-10-26 13:53+0000\n"
"PO-Revision-Date: 2012-10-12 23:18-0300\n"
"Last-Translator: Rafael Ferreira <rafael.f.f1@gmail.com>\n"
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
"Language: pt_BR\n"
@@ -60,16 +61,16 @@ msgstr "Evento de som"
msgid "Unknown window information request: %d"
msgstr "Informação solicitada de janela desconhecida: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:111
#, c-format
msgid "%s is not responding."
msgstr "%s não está respondendo."
msgid "%s is not responding."
msgstr "\"%s\" não está respondendo."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:113
msgid "Application is not responding."
msgstr "O aplicativo não está respondendo."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:118
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@@ -77,20 +78,20 @@ msgstr ""
"Você pode escolher aguardar um pouco e continuar ou forçar o aplicativo a "
"sair completamente."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Wait"
msgstr "_Esperar"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Force Quit"
msgstr "_Forçar sair"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Faltando extensão %s necessária para composição"
#: ../src/core/display.c:446
#: ../src/core/display.c:493
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Falha ao abrir a exibição \"%s\" do X Window System\n"
@@ -165,7 +166,7 @@ msgstr "Versão impressa"
msgid "Mutter plugin to use"
msgstr "Plug-in do Mutter para usar"
#: ../src/core/prefs.c:1071
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -173,14 +174,14 @@ msgstr ""
"As alternativas para aplicativos quebrados estão desabilitadas. É possível "
"que alguns aplicativos não funcionem de maneira adequada.\n"
#: ../src/core/prefs.c:1146
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr ""
"Não foi possível analisar a descrição da fonte \"%s\" a partir da chave "
"GSettings %s\n"
#: ../src/core/prefs.c:1212
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -189,7 +190,7 @@ msgstr ""
"\"%s\" localizado no banco de dados de configurações não é um valor válido "
"para o modificador de botão do mouse\n"
#: ../src/core/prefs.c:1736
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -198,7 +199,7 @@ msgstr ""
"\"%s\" localizado no banco de dados de configurações não é um valor válido "
"para a tecla de atalho \"%s\"\n"
#: ../src/core/prefs.c:1833
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Espaço de trabalho %d"
@@ -328,7 +329,7 @@ msgid "Window manager error: "
msgstr "Erro do gerenciador de janelas: "
#. first time through
#: ../src/core/window.c:7234
#: ../src/core/window.c:7240
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -344,7 +345,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7899
#: ../src/core/window.c:7905
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -354,22 +355,22 @@ msgstr ""
"define o tamanho mínimo %d x %d e máximo %d x %d; isso não faz muito "
"sentido.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "O aplicativo definiu um _NET_WM_PID %lu inválido\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (em %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Janela WM_TRANSIENT_FOR inválida 0x%lx especificada para %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "Janela WM_TRANSIENT_FOR 0x%lx especificada para %s iriar criar loop.\n"
@@ -493,10 +494,24 @@ msgstr ""
"desabilitados na alternância de janelas."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Atrasar a alteração do foco até o ponteiro parar de mover"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Se verdadeiro, e o modo de foco for \"sloppy\" ou \"mouse\", o foco não será "
"alterado imediatamente ao entrar em uma janela, e sim somente após o "
"ponteiro parar de mover."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Largura da borda arrastável"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -505,11 +520,11 @@ msgstr ""
"não são suficientes, as bordas invisíveis serão adicionadas para encontrar "
"este valor."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Selecione a janela a partir da aba instantânea"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Cancelar aba instantânea"
@@ -2172,18 +2187,6 @@ msgstr ""
#~ msgid "Enable Visual Bell"
#~ msgstr "Habilitar campainha visual"
#~ msgid ""
#~ "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
#~ "the focused window will be automatically raised after a delay specified "
#~ "by the auto_raise_delay key. This is not related to clicking on a window "
#~ "to raise it, nor to entering a window during drag-and-drop."
#~ msgstr ""
#~ "Se verdadeiro, e o modo de foco for \"sloppy\" ou \"mouse\", a janela "
#~ "focada será automaticamente elevada após um atraso especificado pela "
#~ "chave auto_raise_delay. Isso não tem relação alguma com clicar em uma "
#~ "janela para elevá-la, ou alcançar uma janela durante uma ação de arrastar-"
#~ "e-soltar."
#~ msgid ""
#~ "If true, ignore the titlebar_font option, and use the standard "
#~ "application font for window titles."

View File

@@ -14,8 +14,8 @@ msgstr ""
"Project-Id-Version: metacity ru\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-08-06 23:35+0000\n"
"PO-Revision-Date: 2012-08-24 22:21+0400\n"
"POT-Creation-Date: 2012-10-11 14:32+0000\n"
"PO-Revision-Date: 2012-10-13 13:41+0400\n"
"Last-Translator: Yuri Myasoedov <omerta13@yandex.ru>\n"
"Language-Team: русский <gnome-cyr@gnome.org>\n"
"Language: ru\n"
@@ -56,41 +56,40 @@ msgstr "Событие звонка"
msgid "Unknown window information request: %d"
msgstr "Неизвестный запрос сведений об окне: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:113
#, c-format
#| msgid "<tt>%s</tt> is not responding."
msgid "%s is not responding."
msgstr "%s не отвечает."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:117
msgid "Application is not responding."
msgstr "Приложение не отвечает."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:122
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr "Можно немного подождать или принудительно завершить работу приложения."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Wait"
msgstr "_Подождать"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Force Quit"
msgstr "Завер_шить"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Отсутствует расширение %s, требуемое для композиции"
#: ../src/core/display.c:446
#: ../src/core/display.c:492
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Не удалось открыть дисплей «%s» системы X Window\n"
#: ../src/core/keybindings.c:844
#: ../src/core/keybindings.c:853
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@@ -159,7 +158,7 @@ msgstr "Вывести версию"
msgid "Mutter plugin to use"
msgstr "Использовать модуль mutter"
#: ../src/core/prefs.c:1065
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -167,12 +166,12 @@ msgstr ""
"Устранение недоделок для сломанных приложений отключено. Некоторые "
"приложения могут работать неправильно.\n"
#: ../src/core/prefs.c:1140
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Не удалось разобрать описание шрифта «%s» из ключа GSettings %s\n"
#: ../src/core/prefs.c:1206
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -181,7 +180,7 @@ msgstr ""
"Значение «%s» из базы данных настроек является недопустимым значением для "
"модификатора кнопки мыши\n"
#: ../src/core/prefs.c:1724
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -190,7 +189,7 @@ msgstr ""
"Значение «%s» из базы данных настроек является недопустимым значением для "
"комбинации клавиш «%s»\n"
#: ../src/core/prefs.c:1821
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Рабочее место %d"
@@ -317,7 +316,7 @@ msgid "Window manager error: "
msgstr "Ошибка менеджера окон: "
#. first time through
#: ../src/core/window.c:7234
#: ../src/core/window.c:7237
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -333,7 +332,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7899
#: ../src/core/window.c:7902
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -343,23 +342,23 @@ msgstr ""
"но установило минимальный размер %d × %d и максимальный размер %d × %d, что "
"не имеет смысла.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr ""
"Приложение установило неправильное значение параметра _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (на %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Неверный параметр WM_TRANSIENT_FOR окна 0x%lx указан для %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "Из-за WM_TRANSIENT_FOR окна 0x%lx для %s произошло бы зацикливание.\n"
@@ -480,10 +479,24 @@ msgstr ""
"циклического переключения окон."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Отложить переключение фокуса до тех пор, пока не остановится указатель"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Если установлено в значение «true», и режим фокуса установлен в значение "
"«sloppy» или «mouse», тогда фокус не будет меняться при переходе к другому "
"окну до тех пор, пока не остановится указатель."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Ширина рамки перетаскивания"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -491,11 +504,11 @@ msgstr ""
"Общая ширина рамок для перетаскивания. Если видимых рамок темы недостаточно, "
"то до этого значения будут добавлены невидимые рамки."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Выбор окна из всплывающей табуляции"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Отменить всплывающую табуляцию"

View File

@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-07-17 07:18+0000\n"
"PO-Revision-Date: 2012-07-19 09:58+0100\n"
"POT-Creation-Date: 2012-10-16 12:48+0000\n"
"PO-Revision-Date: 2012-10-16 14:57+0100\n"
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
"Language: \n"
@@ -51,39 +51,39 @@ msgstr "Dogodek zvonjenja"
msgid "Unknown window information request: %d"
msgstr "Zahteva izpisa podrobnosti neznanega okna: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:111
#, c-format
msgid "%s is not responding."
msgstr "Program %s se ne odziva."
msgid "%s is not responding."
msgstr "%s se ne odziva."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:113
msgid "Application is not responding."
msgstr "Program se ne odziva."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:118
msgid "You may choose to wait a short while for it to continue or force the application to quit entirely."
msgstr "Lahko še malo počakate, če program morda spet začne delovati, ali pa vsilite končanje delovanja."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Wait"
msgstr "_Počakaj"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Force Quit"
msgstr "_Vsili konec"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Manjka razširitev %s, ki je ključna za sestavljanje"
#: ../src/core/display.c:446
#: ../src/core/display.c:493
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Ni mogoče odpreti zaslona '%s' okenskega sistema X\n"
# G:1 K:0 O:0
#: ../src/core/keybindings.c:844
#: ../src/core/keybindings.c:853
#, c-format
msgid "Some other program is already using the key %s with modifiers %x as a binding\n"
msgstr "Tipko %s s spremenilnikom %x uporablja že nek drug program\n"
@@ -143,27 +143,27 @@ msgstr "Izpiši različico"
msgid "Mutter plugin to use"
msgstr "Vstavek Mutter za uporabo"
#: ../src/core/prefs.c:1065
#: ../src/core/prefs.c:1079
msgid "Workarounds for broken applications disabled. Some applications may not behave properly.\n"
msgstr "Obhodi za pokvarjene programe so onemogočeni. Nekateri programi se morda ne bodo odzivali na pričakovan način.\n"
#: ../src/core/prefs.c:1140
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Ni mogoče razčleniti opisa pisave \"%s\" iz ključa GSettings %s\n"
#: ../src/core/prefs.c:1206
#: ../src/core/prefs.c:1220
#, c-format
msgid "\"%s\" found in configuration database is not a valid value for mouse button modifier\n"
msgstr "\"%s\", najden v podatkovni zbirki nastavitev, ni veljaven spremenilnik za miškine gumbe.\n"
#: ../src/core/prefs.c:1724
#: ../src/core/prefs.c:1747
#, c-format
msgid "\"%s\" found in configuration database is not a valid value for keybinding \"%s\"\n"
msgstr "\"%s\", najden v podatkovni zbirki nastavitev, ni veljaven ključ za tipkovno bližnjico \"%s\"\n"
# G:1 K:0 O:0
#: ../src/core/prefs.c:1821
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "Delovna površina %d"
@@ -288,7 +288,7 @@ msgid "Window manager error: "
msgstr "Napaka upravljalnika oken: "
#. first time through
#: ../src/core/window.c:7234
#: ../src/core/window.c:7237
#, c-format
msgid "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER window as specified in the ICCCM.\n"
msgstr "Okno %s nastavi svoj SM_CLIENT_ID, namesto, da bi nastavilo WM_CLIENT_LEADER kot je zavedeno v ICCCM.\n"
@@ -300,27 +300,27 @@ msgstr "Okno %s nastavi svoj SM_CLIENT_ID, namesto, da bi nastavilo WM_CLIENT_LE
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7899
#: ../src/core/window.c:7902
#, c-format
msgid "Window %s sets an MWM hint indicating it isn't resizable, but sets min size %d x %d and max size %d x %d; this doesn't make much sense.\n"
msgstr "Okno %s določi namig MWM, ki pove, da ni mogoče spremeniti velikosti, hkrati pa določi najmanjšo velikost na %d x %d in največjo na %d x %d; vrednost ni smiselna.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Program je nastavil pokvarjen _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (na %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Neveljaven WM_TRANSIENT_FOR za okno 0x%lx naveden za %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "Predmet WM_TRANSIENT_FOR okna 0x%lx za %s lahko ustvari zanko.\n"
@@ -404,18 +404,26 @@ msgid "Determines whether the use of popup and highlight frame should be disable
msgstr "Določa ali naj bo uporaba pojavnih zavihkov in poudarjanja onemogočena med kroženjem oken."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Zamakni spremembe žarišča, dokler se kazalnik še premika"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then the focus will not be changed immediately when entering a window, but only after the pointer stops moving."
msgstr "Izbrana možnost omogoča, da se žarišče, v kolikor je izbran način \"sloppy\" ali \"miška\", ne spremeni takoj ob izbiri okna. Žarišče se spremeni, ko se kazalnik preneha premikati."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Prilagodljiva obroba pravokotnika"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid "The amount of total draggable borders. If the theme's visible borders are not enough, invisible borders will be added to meet this value."
msgstr "Delež skupne prilagodljive obrobe. V kolikor vidni robovi teme niso dovolj, so dodane nevidne obrobe, za dodatno prilagajanje."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Izbor okna iz pojavnega zavihka"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Prekliči pojavni zavihek"

View File

@@ -10,16 +10,16 @@ msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter"
"&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-07-15 00:47+0000\n"
"PO-Revision-Date: 2012-07-22 09:20+0200\n"
"POT-Creation-Date: 2012-10-16 12:48+0000\n"
"PO-Revision-Date: 2012-10-16 20:28+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <gnom@prevod.org>\n"
"Language: sr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n"
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : "
"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Project-Style: gnome\n"
#: ../src/50-mutter-windows.xml.in.h:1
@@ -53,16 +53,17 @@ msgstr "Звонца"
msgid "Unknown window information request: %d"
msgstr "Захтевана је непозната информација о прозору: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:111
#, c-format
msgid "%s is not responding."
#| msgid "%s is not responding."
msgid "“%s” is not responding."
msgstr "„%s“ не даје одзив."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:113
msgid "Application is not responding."
msgstr "Програм не даје одзив."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:118
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@@ -70,25 +71,25 @@ msgstr ""
"Можете мало сачекати док се програм не сабере или приморати програм да "
"комплетно прекине са радом."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Wait"
msgstr "_Сачекај"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Force Quit"
msgstr "_Приморај излаз"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Недостаје потребан композитни додатак %s"
#: ../src/core/display.c:446
#: ../src/core/display.c:493
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Нисам успео да отворим екран „%s“ Икс система прозора\n"
#: ../src/core/keybindings.c:844
#: ../src/core/keybindings.c:853
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@@ -157,7 +158,7 @@ msgstr "Исписује издање"
msgid "Mutter plugin to use"
msgstr "Прикључци Матера за коришћење"
#: ../src/core/prefs.c:1065
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -165,12 +166,12 @@ msgstr ""
"Решења за оштећене програме су искључена. Неке апликације се могу понашати "
"чудно.\n"
#: ../src/core/prefs.c:1140
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Не могу да обрадим опис „%s“ из кључа „%s“ у Гномовим подешавањима\n"
#: ../src/core/prefs.c:1206
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -179,14 +180,14 @@ msgstr ""
"„%s“ је пронађен у бази подешавања што није исправна вредност која мења "
"понашање тастера миша\n"
#: ../src/core/prefs.c:1724
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
"\"%s\"\n"
msgstr "„%s“ из базе са подешавањима није исправна комбинација тастера „%s“\n"
#: ../src/core/prefs.c:1821
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "%d. радни простор"
@@ -336,25 +337,25 @@ msgid ""
"%d x %d and max size %d x %d; this doesn't make much sense.\n"
msgstr ""
"Прозор „%s“ је поставио „MWM“ што наговештава да није променљиве величине, "
"али је поставио најмању величину %d x %d и највећу величину %d x %d што "
"нема много смисла.\n"
"али је поставио најмању величину %d x %d и највећу величину %d x %d што нема "
"много смисла.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Програм је поставио нетачан _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (на %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Неисправан прозор 0x%lx наведен као WM_TRANSIENT_FOR за %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR прозор 0x%lx за %s ће направити петљу.\n"
@@ -474,10 +475,24 @@ msgstr ""
"кретање по прозорима."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Застој првог плана се мења док се показивач не заустави"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Ако је изабрано, а режим првог плана је или „sloppy“ или „mouse“ онда први "
"план неће бити мењан одмах по уласку у прозор, већ само након што показивач "
"престане да се помера."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Ширина ивице за превлачење"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -485,11 +500,11 @@ msgstr ""
"Износ укупне ивице за превлачење. Ако видљиве ивице теме нису довољне, биће "
"додате невидљиве ивице за достизање ове вредности."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Бира прозор из језичка искакања"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Отказивање језичка искакања"
@@ -937,8 +952,8 @@ msgid ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
"specified for this frame style"
msgstr ""
"<button function=„%s“ state=„%s“ draw_ops=\"whatever\"/> мора бити наведен за "
"овај стил оквира"
"<button function=„%s“ state=„%s“ draw_ops=\"whatever\"/> мора бити наведен "
"за овај стил оквира"
#: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
#, c-format

View File

@@ -10,16 +10,16 @@ msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter"
"&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-07-15 00:47+0000\n"
"PO-Revision-Date: 2012-07-22 09:20+0200\n"
"POT-Creation-Date: 2012-10-16 12:48+0000\n"
"PO-Revision-Date: 2012-10-16 20:28+0200\n"
"Last-Translator: Miroslav Nikolić <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <gnom@prevod.org>\n"
"Language: sr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n"
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : "
"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Project-Style: gnome\n"
#: ../src/50-mutter-windows.xml.in.h:1
@@ -53,16 +53,17 @@ msgstr "Zvonca"
msgid "Unknown window information request: %d"
msgstr "Zahtevana je nepoznata informacija o prozoru: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:111
#, c-format
msgid "%s is not responding."
#| msgid "%s is not responding."
msgid "“%s” is not responding."
msgstr "„%s“ ne daje odziv."
#: ../src/core/delete.c:118
#: ../src/core/delete.c:113
msgid "Application is not responding."
msgstr "Program ne daje odziv."
#: ../src/core/delete.c:123
#: ../src/core/delete.c:118
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@@ -70,25 +71,25 @@ msgstr ""
"Možete malo sačekati dok se program ne sabere ili primorati program da "
"kompletno prekine sa radom."
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Wait"
msgstr "_Sačekaj"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:125
msgid "_Force Quit"
msgstr "_Primoraj izlaz"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Nedostaje potreban kompozitni dodatak %s"
#: ../src/core/display.c:446
#: ../src/core/display.c:493
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Nisam uspeo da otvorim ekran „%s“ Iks sistema prozora\n"
#: ../src/core/keybindings.c:844
#: ../src/core/keybindings.c:853
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@@ -157,7 +158,7 @@ msgstr "Ispisuje izdanje"
msgid "Mutter plugin to use"
msgstr "Priključci Matera za korišćenje"
#: ../src/core/prefs.c:1065
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -165,12 +166,12 @@ msgstr ""
"Rešenja za oštećene programe su isključena. Neke aplikacije se mogu ponašati "
"čudno.\n"
#: ../src/core/prefs.c:1140
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Ne mogu da obradim opis „%s“ iz ključa „%s“ u Gnomovim podešavanjima\n"
#: ../src/core/prefs.c:1206
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -179,14 +180,14 @@ msgstr ""
"„%s“ je pronađen u bazi podešavanja što nije ispravna vrednost koja menja "
"ponašanje tastera miša\n"
#: ../src/core/prefs.c:1724
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
"\"%s\"\n"
msgstr "„%s“ iz baze sa podešavanjima nije ispravna kombinacija tastera „%s“\n"
#: ../src/core/prefs.c:1821
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "%d. radni prostor"
@@ -336,25 +337,25 @@ msgid ""
"%d x %d and max size %d x %d; this doesn't make much sense.\n"
msgstr ""
"Prozor „%s“ je postavio „MWM“ što nagoveštava da nije promenljive veličine, "
"ali je postavio najmanju veličinu %d x %d i najveću veličinu %d x %d što "
"nema mnogo smisla.\n"
"ali je postavio najmanju veličinu %d x %d i najveću veličinu %d x %d što nema "
"mnogo smisla.\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Program je postavio netačan _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (na %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Neispravan prozor 0x%lx naveden kao WM_TRANSIENT_FOR za %s.\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR prozor 0x%lx za %s će napraviti petlju.\n"
@@ -474,10 +475,24 @@ msgstr ""
"kretanje po prozorima."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Zastoj prvog plana se menja dok se pokazivač ne zaustavi"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Ako je izabrano, a režim prvog plana je ili „sloppy“ ili „mouse“ onda prvi "
"plan neće biti menjan odmah po ulasku u prozor, već samo nakon što pokazivač "
"prestane da se pomera."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Širina ivice za prevlačenje"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -485,11 +500,11 @@ msgstr ""
"Iznos ukupne ivice za prevlačenje. Ako vidljive ivice teme nisu dovoljne, biće "
"dodate nevidljive ivice za dostizanje ove vrednosti."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Bira prozor iz jezička iskakanja"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Otkazivanje jezička iskakanja"
@@ -937,8 +952,8 @@ msgid ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
"specified for this frame style"
msgstr ""
"<button function=„%s“ state=„%s“ draw_ops=\"whatever\"/> mora biti naveden za "
"ovaj stil okvira"
"<button function=„%s“ state=„%s“ draw_ops=\"whatever\"/> mora biti naveden "
"za ovaj stil okvira"
#: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
#, c-format

687
po/te.po

File diff suppressed because it is too large Load Diff

View File

@@ -12,8 +12,8 @@ msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-07-15 00:47+0000\n"
"PO-Revision-Date: 2012-09-07 19:45+0700\n"
"POT-Creation-Date: 2012-10-11 14:32+0000\n"
"PO-Revision-Date: 2012-10-15 15:15+0700\n"
"Last-Translator: Theppitak Karoonboonyanan <thep@linux.thai.net>\n"
"Language-Team: Thai <thai-l10n@googlegroups.com>\n"
"Language: th\n"
@@ -52,40 +52,40 @@ msgstr "เหตุการณ์กระดิ่ง"
msgid "Unknown window information request: %d"
msgstr "คำร้องขอข้อมูลหน้าต่างที่ไม่รู้จัก: %d"
#: ../src/core/delete.c:114
#: ../src/core/delete.c:113
#, c-format
msgid "%s is not responding."
msgstr "%s ไม่ตอบสนอง"
#: ../src/core/delete.c:118
#: ../src/core/delete.c:117
msgid "Application is not responding."
msgstr "โปรแกรมไม่ตอบสนอง"
#: ../src/core/delete.c:123
#: ../src/core/delete.c:122
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr "คุณอาจเลือกที่จะรอสักครู่ เพื่อให้โปรแกรมทำงานต่อ หรือจะบังคับโปรแกรมออกทันทีเลยก็ได้"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Wait"
msgstr "_รอ"
#: ../src/core/delete.c:130
#: ../src/core/delete.c:129
msgid "_Force Quit"
msgstr "_บังคับออก"
#: ../src/core/display.c:380
#: ../src/core/display.c:396
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "ไม่มีส่วนขยาย %s ซึ่งจำเป็นต่อการทำ composite"
#: ../src/core/display.c:446
#: ../src/core/display.c:492
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "ไม่สามารถเปิดดิสเพลย์ '%s' ของระบบ X Window\n"
#: ../src/core/keybindings.c:844
#: ../src/core/keybindings.c:853
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@@ -151,7 +151,7 @@ msgstr "แสดงเลขรุ่น"
msgid "Mutter plugin to use"
msgstr "ปลั๊กอินของ mutter ที่จะใช้"
#: ../src/core/prefs.c:1065
#: ../src/core/prefs.c:1079
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -159,26 +159,26 @@ msgstr ""
"ปิดการแก้ขัดที่เตรียมไว้สำหรับโปรแกรมเสียๆ บางโปรแกรมแล้ว "
"ซึ่งอาจทำให้โปรแกรมเหล่านี้ทำงานไม่ปกติ\n"
#: ../src/core/prefs.c:1140
#: ../src/core/prefs.c:1154
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "ไม่สามารถแจงคำบรรยายแบบอักษร \"%s\" จากคีย์ %s ของ GSettings\n"
#: ../src/core/prefs.c:1206
#: ../src/core/prefs.c:1220
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
"modifier\n"
msgstr "\"%s\" ที่พบในฐานข้อมูลข้อปรับแต่ง ใช้เป็นปุ่มใช้ร่วมสำหรับเมาส์ไม่ได้\n"
#: ../src/core/prefs.c:1724
#: ../src/core/prefs.c:1747
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
"\"%s\"\n"
msgstr "\"%s\" ที่พบในฐานข้อมูลค่าปรับแต่ง ไม่สามารถใช้เป็นปุ่มลัด \"%s\"\n"
#: ../src/core/prefs.c:1821
#: ../src/core/prefs.c:1844
#, c-format
msgid "Workspace %d"
msgstr "พื้นที่ทำงาน %d"
@@ -330,22 +330,22 @@ msgstr ""
"หน้าต่าง %s ตั้งค่า MWM hint ไว้ว่าเป็นหน้าต่างที่เปลี่ยนขนาดไม่ได้ แต่กลับตั้งค่าขนาดต่ำสุด %d x "
"%d และขนาดสูงสุด %d x %d ไว้ ซึ่งไม่สมเหตุสมผลเท่าไรนัก\n"
#: ../src/core/window-props.c:310
#: ../src/core/window-props.c:274
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "โปรแกรมประยุกต์ตั้งค่า _NET_WM_PID เป็น %lu ซึ่งไม่มีอยู่จริง\n"
#: ../src/core/window-props.c:429
#: ../src/core/window-props.c:393
#, c-format
msgid "%s (on %s)"
msgstr "%s (ที่เครื่อง %s)"
#: ../src/core/window-props.c:1484
#: ../src/core/window-props.c:1448
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "หน้าต่าง WM_TRANSIENT_FOR 0x%lx ที่กำหนดให้กับ %s เป็นค่าที่ใช้ไม่ได้\n"
#: ../src/core/window-props.c:1495
#: ../src/core/window-props.c:1459
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "หน้าต่าง WM_TRANSIENT_FOR 0x%lx สำหรับ %s จะทำให้เกิดวงวน\n"
@@ -459,10 +459,23 @@ msgid ""
msgstr "กำหนดว่าจะปิดการใช้กล่องผุดขึ้นและการเน้นกรอบหน้าต่างสำหรับการสลับหน้าต่างหรือไม่"
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "ชะลอการย้ายโฟกัสจนกว่าเคอร์เซอร์เมาส์จะหยุดเคลื่อน"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"ถ้ามีค่าเป็นจริง และโหมดโฟกัสเป็น \"sloppy\" หรือ \"mouse\" อย่างใดอย่างหนึ่งแล้ว "
"ก็จะไม่ย้ายโฟกัสหน้าต่างทันทีทันใดเมื่อเข้าสู่หน้าต่าง จนกว่าเคอร์เซอร์เมาส์จะหยุดเคลื่อนที่"
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "ความกว้างของขอบหน้าต่างส่วนที่ลากได้"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -470,11 +483,11 @@ msgstr ""
"ขนาดของขอบหน้าต่างส่วนที่ลากได้ ถ้าขอบหน้าต่างส่วนที่ปรากฏของชุดตกแต่งกว้างไม่พอ "
"ก็จะเพิ่มขอบส่วนที่มองไม่เห็นเพื่อให้ได้เท่ากับความกว้างนี้"
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "เลือกหน้าต่างจากกล่องผุดขึ้นของปุ่มแท็บ"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "ยกเลิกกล่องผุดขึ้นของปุ่มแท็บ"
@@ -1934,17 +1947,6 @@ msgstr "แจงค่านิพจน์พิกัดทั้งหมด
#~ msgid "Enable Visual Bell"
#~ msgstr "ใช้ระฆังภาพ"
#~ msgid ""
#~ "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
#~ "the focused window will be automatically raised after a delay specified "
#~ "by the auto_raise_delay key. This is not related to clicking on a window "
#~ "to raise it, nor to entering a window during drag-and-drop."
#~ msgstr ""
#~ "ถ้ามีค่าเป็นจริง และโหมดโฟกัสเป็น \"sloppy\" หรือ \"mouse\" อย่างใดอย่างหนึ่งแล้ว "
#~ "จะยกหน้าต่างที่ได้โฟกัสขึ้นมาโดยอัตโนมัติ หลังจากหน่วงเวลาเป็นระยะเวลาตามที่ระบุในคีย์ "
#~ "auto_raise_delay การยกหน้าต่างดังกล่าว ไม่เกี่ยวกับการคลิกบนหน้าต่างเพื่อยกหน้าต่างขึ้น "
#~ "หรือการเลื่อนเมาส์เข้าสู่หน้าต่างระหว่างการลากวางแต่อย่างใด"
#~ msgid ""
#~ "If true, ignore the titlebar_font option, and use the standard "
#~ "application font for window titles."

251
po/uk.po
View File

@@ -2,14 +2,15 @@
# Yuriy Syrota <rasta@renome.rovno.ua>, 2001, 2002.
# Maxim Dziumanenko <dziumanenko@gmail.com>, 2004-2008
# Korostil Daniel <ted.korostiled@gmail.com>, 2011, 2012.
# Re. <ted.korostiled@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: metacity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-03-18 17:38+0200\n"
"PO-Revision-Date: 2012-03-18 17:42+0300\n"
"Last-Translator: Korostil Daniel <ted.korostiled@gmail.com>\n"
"Language-Team: translation@linux.org.ua\n"
"POT-Creation-Date: 2012-09-21 10:04+0300\n"
"PO-Revision-Date: 2012-09-21 10:05+0300\n"
"Last-Translator: Re. <ted.korostiled@gmail.com>\n"
"Language-Team: linux.org.ua\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -39,7 +40,7 @@ msgid ""
"\"."
msgstr "Уже запущено інший композитний менеджер на екрані %i через показ «%s»."
#: ../src/core/bell.c:307
#: ../src/core/bell.c:320
msgid "Bell event"
msgstr "Подія гудка"
@@ -48,77 +49,77 @@ msgstr "Подія гудка"
msgid "Unknown window information request: %d"
msgstr "Запит інформації невідомого вікна: %d"
#: ../src/core/delete.c:111
#: ../src/core/delete.c:113
#, c-format
msgid "<tt>%s</tt> is not responding."
msgstr "<tt>%s</tt> не відповідає."
msgid "%s is not responding."
msgstr "%s не відповідає."
#: ../src/core/delete.c:114
#: ../src/core/delete.c:117
msgid "Application is not responding."
msgstr "Програма не відповідає."
#: ../src/core/delete.c:119
#: ../src/core/delete.c:122
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Можете трошки зачекати відновлення активності або примусово закрити програму."
#: ../src/core/delete.c:126
#: ../src/core/delete.c:129
msgid "_Wait"
msgstr "_Зачекати"
#: ../src/core/delete.c:126
#: ../src/core/delete.c:129
msgid "_Force Quit"
msgstr "_Завершити примусово"
#: ../src/core/display.c:387
#: ../src/core/display.c:386
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Нема розширення %s, яке потрібне для композитного режиму"
#: ../src/core/display.c:453
#: ../src/core/display.c:482
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Не вдалось відкрити дисплей віконної системи X «%s»\n"
#: ../src/core/keybindings.c:852
#: ../src/core/keybindings.c:853
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
"binding\n"
msgstr "Клавішу «%s» з модифікаторами «%x» вже використовує інша програма\n"
#: ../src/core/main.c:206
#: ../src/core/main.c:196
msgid "Disable connection to session manager"
msgstr "Вимкнути з'єднання з менеджером сеансу"
#: ../src/core/main.c:212
#: ../src/core/main.c:202
msgid "Replace the running window manager"
msgstr "Замінити запущений віконний менеджер"
#: ../src/core/main.c:218
#: ../src/core/main.c:208
msgid "Specify session management ID"
msgstr "Вказати ідентифікатор сеансу"
#: ../src/core/main.c:223
#: ../src/core/main.c:213
msgid "X Display to use"
msgstr "Дисплей X"
#: ../src/core/main.c:229
#: ../src/core/main.c:219
msgid "Initialize session from savefile"
msgstr "Розпочати сеанс зі збереженого файла"
#: ../src/core/main.c:235
#: ../src/core/main.c:225
msgid "Make X calls synchronous"
msgstr "Зробити виклики X синхронними"
#: ../src/core/main.c:504
#: ../src/core/main.c:494
#, c-format
msgid "Failed to scan themes directory: %s\n"
msgstr "Помилка зчитування каталогу тем: %s\n"
#: ../src/core/main.c:520
#: ../src/core/main.c:510
#, c-format
msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@@ -146,10 +147,10 @@ msgid "Print version"
msgstr "Показати версію"
#: ../src/core/mutter.c:60
msgid "Comma-separated list of compositor plugins"
msgstr "Список композитних додатків розділених комою"
msgid "Mutter plugin to use"
msgstr "Додатки Clutter для використання"
#: ../src/core/prefs.c:1077
#: ../src/core/prefs.c:1071
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -157,12 +158,12 @@ msgstr ""
"Обхід для роботи із зіпсованими програмами вимкнено. Деякі додатки можуть "
"працювати некоректно.\n"
#: ../src/core/prefs.c:1152
#: ../src/core/prefs.c:1146
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Неможливо проаналізувати опис шрифту «%s» у ключі GSettings %s\n"
#: ../src/core/prefs.c:1218
#: ../src/core/prefs.c:1212
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -171,7 +172,7 @@ msgstr ""
"У базі даних налаштування знайдено «%s» — що не є правильним значенням "
"модифікатора клавіші миші.\n"
#: ../src/core/prefs.c:1739
#: ../src/core/prefs.c:1736
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -180,17 +181,17 @@ msgstr ""
"Знайдене у базі даних налаштування значення «%s» не є правильним записом "
"прив'язки клавіш «%s»\n"
#: ../src/core/prefs.c:1836
#: ../src/core/prefs.c:1833
#, c-format
msgid "Workspace %d"
msgstr "Робочий простір %d"
#: ../src/core/screen.c:730
#: ../src/core/screen.c:652
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Екран %d на дисплеї «%s» не правильний\n"
#: ../src/core/screen.c:746
#: ../src/core/screen.c:668
#, c-format
msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
@@ -199,7 +200,7 @@ msgstr ""
"Екран %d на дисплеї «%s» вже має менеджера вікон; спробуйте вказати параметр "
"--replace, щоб замінити поточний менеджер вікон.\n"
#: ../src/core/screen.c:773
#: ../src/core/screen.c:695
#, c-format
msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
@@ -207,12 +208,12 @@ msgstr ""
"Не вдалось одержати функцію виділення менеджеру вікон на екрані %d дисплею "
"«%s»\n"
#: ../src/core/screen.c:828
#: ../src/core/screen.c:750
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Екран %d на дисплеї «%s» вже має менеджера вікон\n"
#: ../src/core/screen.c:1013
#: ../src/core/screen.c:935
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Не вдалось відпустити екран %d на дисплеї «%s»\n"
@@ -272,44 +273,44 @@ msgstr ""
"Ці вікна не підтримують &quot;збереження поточних параметрів&quot; і при "
"наступному входженні їх треба запустити власноруч."
#: ../src/core/util.c:111
#: ../src/core/util.c:80
#, c-format
msgid "Failed to open debug log: %s\n"
msgstr "Збій відкриття журналу зневадження: %s\n"
#: ../src/core/util.c:121
#: ../src/core/util.c:90
#, c-format
msgid "Failed to fdopen() log file %s: %s\n"
msgstr "Збій виконання fdopen() для журналу %s: %s\n"
#: ../src/core/util.c:127
#: ../src/core/util.c:96
#, c-format
msgid "Opened log file %s\n"
msgstr "Відкрито журнал %s\n"
#: ../src/core/util.c:146 ../src/tools/mutter-message.c:149
#: ../src/core/util.c:115 ../src/tools/mutter-message.c:149
#, c-format
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter зібрано без підтримки докладного режиму\n"
#: ../src/core/util.c:290
#: ../src/core/util.c:259
msgid "Window manager: "
msgstr "Віконний менеджер:"
#: ../src/core/util.c:438
#: ../src/core/util.c:407
msgid "Bug in window manager: "
msgstr "Вада у віконному менеджері:"
#: ../src/core/util.c:471
#: ../src/core/util.c:438
msgid "Window manager warning: "
msgstr "Попередження віконного менеджера:"
#: ../src/core/util.c:499
#: ../src/core/util.c:466
msgid "Window manager error: "
msgstr "Помилка віконного менеджера:"
#. first time through
#: ../src/core/window.c:7266
#: ../src/core/window.c:7234
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -325,7 +326,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7931
#: ../src/core/window.c:7899
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -335,22 +336,22 @@ msgstr ""
"змінюватись, але встановило мінімальний розмір %d x %d та максимальний %d x "
"%d;, в чому не має сенсу.\n"
#: ../src/core/window-props.c:309
#: ../src/core/window-props.c:310
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Програма встановила неправильне значення параметра _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:426
#: ../src/core/window-props.c:429
#, c-format
msgid "%s (on %s)"
msgstr "%s (на %s)"
#: ../src/core/window-props.c:1481
#: ../src/core/window-props.c:1484
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Неправильний параметр WM_TRANSIENT_FOR вікна 0x%lx вказано для %s.\n"
#: ../src/core/window-props.c:1492
#: ../src/core/window-props.c:1495
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "Вікно WM_TRANSIENT_FOR 0x%lx для %s створило б петлю.\n"
@@ -417,22 +418,10 @@ msgstr ""
"вікном."
#: ../src/org.gnome.mutter.gschema.xml.in.h:5
msgid "Live Hidden Windows"
msgstr "Активувати сховані вікна"
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
msgid ""
"Determines whether hidden windows (i.e., minimized windows and windows on "
"other workspaces than the current one) should be kept alive."
msgstr ""
"Визначає, чи сховані вікна (наприклад, згорнуті вікна та вікна на інших "
"робочих просторах) слід утримувати активними."
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Увімкнути розбиття країв, коли кладуться вікна на краї екрана"
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
msgid ""
"If enabled, dropping windows on vertical screen edges maximizes them "
"vertically and resizes them horizontally to cover half of the available "
@@ -442,25 +431,25 @@ msgstr ""
"змінить їхній розмір горизонтально, щоб покрити половину доступної ділянки. "
"Перекидання вікон на верхівку екрана розгорне їх повністю."
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
msgid "Workspaces are managed dynamically"
msgstr "Робочі простори організовуються динамічно"
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
msgid ""
"Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)."
msgstr ""
"Визначає, чи робочі простори керуються динамічно, чи є певна статична "
"кількість просторів (визначено ключем num-workspaces у "
"org.gnome.desktop.wm.preferences)."
"кількість просторів (визначено ключем num-workspaces у org.gnome.desktop.wm."
"preferences)."
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
msgid "Workspaces only on primary"
msgstr "Робочий простір лише на первинному"
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
msgid ""
"Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor."
@@ -468,11 +457,11 @@ msgstr ""
"Визначає, чи перемикання робочого простору повинно здійснюватись для вікон "
"на всіх моніторах, чи лише для вікон на первинному моніторі."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
msgid "No tab popup"
msgstr "Без контекстних вкладок"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
msgid ""
"Determines whether the use of popup and highlight frame should be disabled "
"for window cycling."
@@ -480,11 +469,11 @@ msgstr ""
"Визначає, чи слід вимкнути виринання і підкреслювання рамки для повторюваних "
"вікон. "
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Draggable border width"
msgstr "Перетяжна ширина меж"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -492,11 +481,11 @@ msgstr ""
"Загальний об'єм перетяжних меж. Якщо видимих меж теми не вистачає, буде "
"використано це значення з невидимих меж."
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Select window from tab popup"
msgstr "Вибрати вікно з контекстних вкладок"
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid "Cancel tab popup"
msgstr "Скасувати контекстні вкладки"
@@ -704,48 +693,48 @@ msgstr "Mod5"
msgid "%d x %d"
msgstr "%d x %d"
#: ../src/ui/theme.c:253
#: ../src/ui/theme.c:234
msgid "top"
msgstr "top"
#: ../src/ui/theme.c:255
#: ../src/ui/theme.c:236
msgid "bottom"
msgstr "bottom"
#: ../src/ui/theme.c:257
#: ../src/ui/theme.c:238
msgid "left"
msgstr "left"
#: ../src/ui/theme.c:259
#: ../src/ui/theme.c:240
msgid "right"
msgstr "right"
#: ../src/ui/theme.c:286
#: ../src/ui/theme.c:268
#, c-format
msgid "frame geometry does not specify \"%s\" dimension"
msgstr "геометрія рамки не визначає розмір «%s»"
#: ../src/ui/theme.c:305
#: ../src/ui/theme.c:287
#, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr "геометрія рамки не визначає розмір «%s» рамки «%s»"
#: ../src/ui/theme.c:342
#: ../src/ui/theme.c:324
#, c-format
msgid "Button aspect ratio %g is not reasonable"
msgstr "Неприпустимий коефіцієнт пропорційності %g"
#: ../src/ui/theme.c:354
#: ../src/ui/theme.c:336
#, c-format
msgid "Frame geometry does not specify size of buttons"
msgstr "Геометрія рамки не визначає розміри кнопок"
#: ../src/ui/theme.c:1067
#: ../src/ui/theme.c:1049
#, c-format
msgid "Gradients should have at least two colors"
msgstr "Градієнти повинні мати принаймні два кольори"
#: ../src/ui/theme.c:1219
#: ../src/ui/theme.c:1201
#, c-format
msgid ""
"GTK custom color specification must have color name and fallback in "
@@ -754,7 +743,7 @@ msgstr ""
"Специфікації власного кольору GTK повинні мати назву кольору і запас у "
"дужках, наприклад, gtk:custom(foo,bar); неможливо розібрати «%s»"
#: ../src/ui/theme.c:1235
#: ../src/ui/theme.c:1217
#, c-format
msgid ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
@@ -763,7 +752,7 @@ msgstr ""
"Неправильний символ «%c» у параметрі color_name для gtk:custom, дозволено "
"тільки A-Za-z0-9-_"
#: ../src/ui/theme.c:1249
#: ../src/ui/theme.c:1231
#, c-format
msgid ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
@@ -772,7 +761,7 @@ msgstr ""
"Формат Gtk:custom — «gtk:custom(color_name,fallback)», «%s» не відповідає "
"формату"
#: ../src/ui/theme.c:1294
#: ../src/ui/theme.c:1276
#, c-format
msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
@@ -781,7 +770,7 @@ msgstr ""
"При визначенні кольору GTK потрібно вказувати режим у прямокутних дужках, "
"наприклад, gtk:fg[NORMAL], де NORMAL — режим; неможливо розібрати «%s»"
#: ../src/ui/theme.c:1308
#: ../src/ui/theme.c:1290
#, c-format
msgid ""
"GTK color specification must have a close bracket after the state, e.g. gtk:"
@@ -791,17 +780,17 @@ msgstr ""
"прямокутна дужка, наприклад, gtk:fg[NORMAL], де NORMAL — режим; неможливо "
"розібрати «%s»"
#: ../src/ui/theme.c:1319
#: ../src/ui/theme.c:1301
#, c-format
msgid "Did not understand state \"%s\" in color specification"
msgstr "Неможливо розпізнати режим «%s» у визначенні кольору"
#: ../src/ui/theme.c:1332
#: ../src/ui/theme.c:1314
#, c-format
msgid "Did not understand color component \"%s\" in color specification"
msgstr "Неможливо розпізнати компонент кольору «%s» у визначенні кольору"
#: ../src/ui/theme.c:1361
#: ../src/ui/theme.c:1343
#, c-format
msgid ""
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
@@ -810,44 +799,44 @@ msgstr ""
"Формат визначення змішаного кольору такий — «blend/bg_color/fg_color/alpha», "
"«%s» не відповідає формату"
#: ../src/ui/theme.c:1372
#: ../src/ui/theme.c:1354
#, c-format
msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "Неможливо розібрати значення альфа «%s» у змішаному кольорі"
#: ../src/ui/theme.c:1382
#: ../src/ui/theme.c:1364
#, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr "Значення альфа «%s» у змішаному кольорі поза межами 0.0 — 1.0"
#: ../src/ui/theme.c:1429
#: ../src/ui/theme.c:1411
#, c-format
msgid ""
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
msgstr ""
"Формат тіні такий — «shade/base_color/factor», «%s» не відповідає формату"
#: ../src/ui/theme.c:1440
#: ../src/ui/theme.c:1422
#, c-format
msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "Не вдалось проаналізувати компонент тіні «%s» у затіненому кольорі"
#: ../src/ui/theme.c:1450
#: ../src/ui/theme.c:1432
#, c-format
msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "Компонент тіні «%s» у затіненому кольорі від'ємний"
#: ../src/ui/theme.c:1479
#: ../src/ui/theme.c:1461
#, c-format
msgid "Could not parse color \"%s\""
msgstr "Не вдалось проаналізувати колір «%s»"
#: ../src/ui/theme.c:1790
#: ../src/ui/theme.c:1778
#, c-format
msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "Вираз координати містить заборонений символ «%s»"
#: ../src/ui/theme.c:1817
#: ../src/ui/theme.c:1805
#, c-format
msgid ""
"Coordinate expression contains floating point number '%s' which could not be "
@@ -855,29 +844,29 @@ msgid ""
msgstr ""
"Вираз координати містить число з рухомою комою «%s», яке не вдалось розібрати"
#: ../src/ui/theme.c:1831
#: ../src/ui/theme.c:1819
#, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr "Вираз координати містить ціле число «%s», яке не вдалось розібрати"
#: ../src/ui/theme.c:1953
#: ../src/ui/theme.c:1940
#, c-format
msgid ""
"Coordinate expression contained unknown operator at the start of this text: "
"\"%s\""
msgstr "Вираз координати містить невідомий оператор на початку тексту: «%s»"
#: ../src/ui/theme.c:2010
#: ../src/ui/theme.c:1997
#, c-format
msgid "Coordinate expression was empty or not understood"
msgstr "Вираз координати був пустий або його неможливо розпізнати"
#: ../src/ui/theme.c:2121 ../src/ui/theme.c:2131 ../src/ui/theme.c:2165
#: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
#, c-format
msgid "Coordinate expression results in division by zero"
msgstr "Вираз координати призвів до ділення на нуль"
#: ../src/ui/theme.c:2173
#: ../src/ui/theme.c:2162
#, c-format
msgid ""
"Coordinate expression tries to use mod operator on a floating-point number"
@@ -885,23 +874,23 @@ msgstr ""
"Вираз координати намагається використати оператор знаходження залишку від "
"ділення для числа з рухомою комою"
#: ../src/ui/theme.c:2229
#: ../src/ui/theme.c:2218
#, c-format
msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected"
msgstr "Вираз координати містить оператор «%s», там де очікувався операнд"
#: ../src/ui/theme.c:2238
#: ../src/ui/theme.c:2227
#, c-format
msgid "Coordinate expression had an operand where an operator was expected"
msgstr "Вираз координати містить оператор, там де очікувався оператор"
#: ../src/ui/theme.c:2246
#: ../src/ui/theme.c:2235
#, c-format
msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "Вираз координати закінчується оператором замість операнда"
#: ../src/ui/theme.c:2256
#: ../src/ui/theme.c:2245
#, c-format
msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@@ -910,37 +899,37 @@ msgstr ""
"Вираз координати містить оператор «%c», за яким йде оператор «%c» без "
"операнду між ними"
#: ../src/ui/theme.c:2407 ../src/ui/theme.c:2452
#: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441
#, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr "Вираз координати містить невідому змінну або константу «%s»"
#: ../src/ui/theme.c:2506
#: ../src/ui/theme.c:2495
#, c-format
msgid "Coordinate expression parser overflowed its buffer."
msgstr "Переповнення буфера обробника координат."
#: ../src/ui/theme.c:2535
#: ../src/ui/theme.c:2524
#, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr "Вираз координати містить завершальну дужку без відповідної починальної"
#: ../src/ui/theme.c:2599
#: ../src/ui/theme.c:2588
#, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr "Вираз координати містить починальну дужку без відповідної завершальної"
#: ../src/ui/theme.c:2610
#: ../src/ui/theme.c:2599
#, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr "Здається, вираз координати не містить жодного оператора чи операнду"
#: ../src/ui/theme.c:2822 ../src/ui/theme.c:2842 ../src/ui/theme.c:2862
#: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
#, c-format
msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "Тема містить вираз, що призводить до помилки: %s\n"
#: ../src/ui/theme.c:4533
#: ../src/ui/theme.c:4498
#, c-format
msgid ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
@@ -949,25 +938,25 @@ msgstr ""
"для цього стилю рамки треба вказати <button function=\"%s\" state=\"%s\" "
"draw_ops=\"будь-що\"/>"
#: ../src/ui/theme.c:5066 ../src/ui/theme.c:5091
#: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
#, c-format
msgid ""
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr ""
"Нема <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"будь-що\"/>"
#: ../src/ui/theme.c:5139
#: ../src/ui/theme.c:5082
#, c-format
msgid "Failed to load theme \"%s\": %s\n"
msgstr "Не вдалось завантажити тему «%s»: %s\n"
#: ../src/ui/theme.c:5275 ../src/ui/theme.c:5282 ../src/ui/theme.c:5289
#: ../src/ui/theme.c:5296 ../src/ui/theme.c:5303
#: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
#, c-format
msgid "No <%s> set for theme \"%s\""
msgstr "Не встановлено <%s> для теми «%s»"
#: ../src/ui/theme.c:5311
#: ../src/ui/theme.c:5254
#, c-format
msgid ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
@@ -976,7 +965,7 @@ msgstr ""
"Немає стилю рамки для вікна типу «%s» у темі «%s», додайте елемент <window "
"type=\"%s\" style_set=\"будь-що\"/> "
#: ../src/ui/theme.c:5709 ../src/ui/theme.c:5771 ../src/ui/theme.c:5834
#: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
#, c-format
msgid ""
"User-defined constants must begin with a capital letter; \"%s\" does not"
@@ -984,7 +973,7 @@ msgstr ""
"Визначені користувачем константи повинні починатись з великої літери; «%s» "
"не починається з великої літери"
#: ../src/ui/theme.c:5717 ../src/ui/theme.c:5779 ../src/ui/theme.c:5842
#: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
#, c-format
msgid "Constant \"%s\" has already been defined"
msgstr "Константу «%s» вже визначено"
@@ -1371,7 +1360,7 @@ msgstr "Текст не дозволяється у елементі <%s>"
msgid "<%s> specified twice for this theme"
msgstr "<%s> в цій темі вказано двічі"
#: ../src/ui/theme-parser.c:4348
#: ../src/ui/theme-parser.c:4334
#, c-format
msgid "Failed to find a valid file for theme %s\n"
msgstr "Не вдалось знайти коректний файл для теми %s\n"
@@ -1579,6 +1568,19 @@ msgstr ""
"%d координатних виразів проаналізовано за %g секунд (середнє значення: %g "
"секунд)\n"
#~ msgid "Comma-separated list of compositor plugins"
#~ msgstr "Список композитних додатків розділених комою"
#~ msgid "Live Hidden Windows"
#~ msgstr "Активувати сховані вікна"
#~ msgid ""
#~ "Determines whether hidden windows (i.e., minimized windows and windows on "
#~ "other workspaces than the current one) should be kept alive."
#~ msgstr ""
#~ "Визначає, чи сховані вікна (наприклад, згорнуті вікна та вікна на інших "
#~ "робочих просторах) слід утримувати активними."
#~ msgid "Close Window"
#~ msgstr "Закрити вікно"
@@ -1905,9 +1907,6 @@ msgstr ""
#~ msgid "Error setting clutter plugin list: %s\n"
#~ msgstr "Помилка налаштування списку додатків Clutter: %s\n"
#~ msgid "Clutter Plugins"
#~ msgstr "Додатки Clutter"
#~ msgid "Plugins to load for the Clutter-based compositing manager."
#~ msgstr ""
#~ "Додатки для завантаження композитного менеджера основаного на Clutter."

View File

@@ -75,6 +75,20 @@ libmutter_la_SOURCES = \
core/constraints.h \
core/core.c \
core/delete.c \
core/device.c \
meta/device.h \
core/device-keyboard.c \
core/device-keyboard.h \
core/device-pointer.c \
core/device-pointer.h \
core/device-private.h \
core/device-map.c \
meta/device-map.h \
core/device-map-private.h \
core/device-map-core.c \
core/device-map-core.h \
core/devices-core.c \
core/devices-core.h \
core/display.c \
core/display-private.h \
meta/display.h \
@@ -97,6 +111,8 @@ libmutter_la_SOURCES = \
meta/group.h \
core/iconcache.c \
core/iconcache.h \
core/input-events.c \
core/input-events.h \
core/keybindings.c \
core/keybindings-private.h \
core/main.c \
@@ -151,6 +167,14 @@ libmutter_la_SOURCES = \
ui/preview-widget.c \
$(mutter_built_sources)
if HAVE_XINPUT2
libmutter_la_SOURCES += \
core/device-map-xi2.c \
core/device-map-xi2.h \
core/devices-xi2.c \
core/devices-xi2.h
endif
libmutter_la_LDFLAGS = -no-undefined
libmutter_la_LIBADD = $(MUTTER_LIBS)
@@ -161,6 +185,8 @@ libmutterinclude_base_headers = \
meta/common.h \
meta/compositor-mutter.h \
meta/compositor.h \
meta/device.h \
meta/device-map.h \
meta/display.h \
meta/errors.h \
meta/gradient.h \

View File

@@ -18,6 +18,8 @@
#include "meta-background-actor-private.h"
#include "window-private.h" /* to check window->hidden */
#include "display-private.h" /* for meta_display_lookup_x_window() */
#include "core.h" /* for meta_core_select_events() */
#include "input-events.h"
#include <X11/extensions/shape.h>
#include <X11/extensions/Xcomposite.h>
@@ -155,7 +157,6 @@ get_output_window (MetaScreen *screen)
MetaDisplay *display = meta_screen_get_display (screen);
Display *xdisplay = meta_display_get_xdisplay (display);
Window output, xroot;
XWindowAttributes attr;
long event_mask;
xroot = meta_screen_get_xroot (screen);
@@ -169,13 +170,7 @@ get_output_window (MetaScreen *screen)
KeyPressMask | KeyReleaseMask;
output = XCompositeGetOverlayWindow (xdisplay, xroot);
if (XGetWindowAttributes (xdisplay, output, &attr))
{
event_mask |= attr.your_event_mask;
}
XSelectInput (xdisplay, output, event_mask);
meta_core_select_events (xdisplay, output, event_mask, TRUE);
return output;
}
@@ -347,26 +342,34 @@ meta_begin_modal_for_plugin (MetaScreen *screen,
* merge the two.
*/
MetaDisplay *display = meta_screen_get_display (screen);
Display *xdpy = meta_display_get_xdisplay (display);
MetaCompositor *compositor = display->compositor;
gboolean pointer_grabbed = FALSE;
gboolean keyboard_grabbed = FALSE;
int result;
gboolean result;
MetaDevice *device;
MetaGrabInfo *grab_info;
if (compositor->modal_plugin != NULL || display->grab_op != META_GRAB_OP_NONE)
/* FIXME: need a real device here, and probably
* some exclusion mode for other devices */
device = meta_device_map_lookup (display->device_map,
META_CORE_POINTER_ID);
grab_info = meta_display_get_grab_info (display, device);
if (compositor->modal_plugin != NULL || grab_info != NULL)
return FALSE;
if ((options & META_MODAL_POINTER_ALREADY_GRABBED) == 0)
{
result = XGrabPointer (xdpy, grab_window,
False, /* owner_events */
(ButtonPressMask | ButtonReleaseMask |
EnterWindowMask | LeaveWindowMask | PointerMotionMask),
GrabModeAsync, GrabModeAsync,
None, /* confine to */
cursor,
timestamp);
if (result != Success)
result = meta_device_grab (device,
grab_window,
(ButtonPressMask | ButtonReleaseMask |
EnterWindowMask | LeaveWindowMask | PointerMotionMask),
cursor,
FALSE,
FALSE,
timestamp);
if (!result)
goto fail;
pointer_grabbed = TRUE;
@@ -374,22 +377,25 @@ meta_begin_modal_for_plugin (MetaScreen *screen,
if ((options & META_MODAL_KEYBOARD_ALREADY_GRABBED) == 0)
{
result = XGrabKeyboard (xdpy, grab_window,
False, /* owner_events */
GrabModeAsync, GrabModeAsync,
timestamp);
if (result != Success)
result = meta_device_grab (meta_device_get_paired_device (device),
grab_window,
(KeyPressMask | KeyReleaseMask),
META_CURSOR_DEFAULT,
FALSE, FALSE,
timestamp);
if (!result)
goto fail;
keyboard_grabbed = TRUE;
}
display->grab_op = META_GRAB_OP_COMPOSITOR;
display->grab_window = NULL;
display->grab_screen = screen;
display->grab_have_pointer = TRUE;
display->grab_have_keyboard = TRUE;
grab_info = meta_display_create_grab_info (display, device);
grab_info->grab_op = META_GRAB_OP_COMPOSITOR;
grab_info->grab_window = NULL;
grab_info->grab_screen = screen;
grab_info->grab_have_pointer = TRUE;
grab_info->grab_have_keyboard = TRUE;
compositor->modal_plugin = plugin;
@@ -397,9 +403,9 @@ meta_begin_modal_for_plugin (MetaScreen *screen,
fail:
if (pointer_grabbed)
XUngrabPointer (xdpy, timestamp);
meta_device_ungrab (device, timestamp);
if (keyboard_grabbed)
XUngrabKeyboard (xdpy, timestamp);
meta_device_ungrab (meta_device_get_paired_device (device), timestamp);
return FALSE;
}
@@ -410,20 +416,19 @@ meta_end_modal_for_plugin (MetaScreen *screen,
guint32 timestamp)
{
MetaDisplay *display = meta_screen_get_display (screen);
Display *xdpy = meta_display_get_xdisplay (display);
MetaCompositor *compositor = display->compositor;
MetaDevice *device;
g_return_if_fail (compositor->modal_plugin == plugin);
XUngrabPointer (xdpy, timestamp);
XUngrabKeyboard (xdpy, timestamp);
/* FIXME: need a real device here */
device = meta_device_map_lookup (display->device_map,
META_CORE_POINTER_ID);
display->grab_op = META_GRAB_OP_NONE;
display->grab_window = NULL;
display->grab_screen = NULL;
display->grab_have_pointer = FALSE;
display->grab_have_keyboard = FALSE;
meta_device_ungrab (device, timestamp);
meta_device_ungrab (meta_device_get_paired_device (device), timestamp);
meta_display_remove_grab_info (display, device);
compositor->modal_plugin = NULL;
}
@@ -456,7 +461,6 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
Window xroot = meta_screen_get_xroot (screen);
Window xwin;
gint width, height;
XWindowAttributes attr;
long event_mask;
guint n_retries;
guint max_retries;
@@ -533,12 +537,7 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
KeyPressMask | KeyReleaseMask |
StructureNotifyMask;
if (XGetWindowAttributes (xdisplay, xwin, &attr))
{
event_mask |= attr.your_event_mask;
}
XSelectInput (xdisplay, xwin, event_mask);
meta_core_select_events (xdisplay, xwin, event_mask, TRUE);
info->window_group = meta_window_group_new (screen);
info->background_actor = meta_background_actor_new_for_screen (screen);
@@ -695,9 +694,15 @@ meta_compositor_set_updates (MetaCompositor *compositor,
}
static gboolean
is_grabbed_event (XEvent *event)
is_grabbed_event (MetaDisplay *display,
XEvent *event)
{
switch (event->xany.type)
guint evtype;
if (!meta_input_event_get_type (display, event, &evtype))
return FALSE;
switch (evtype)
{
case ButtonPress:
case ButtonRelease:
@@ -730,7 +735,8 @@ meta_compositor_process_event (MetaCompositor *compositor,
XEvent *event,
MetaWindow *window)
{
if (compositor->modal_plugin && is_grabbed_event (event))
if (compositor->modal_plugin &&
is_grabbed_event (compositor->display, event))
{
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (compositor->modal_plugin);

View File

@@ -305,8 +305,8 @@ meta_plugin_manager_xevent_filter (MetaPluginManager *plugin_mgr,
* of that plugin to pass events to Clutter. Otherwise, we send the
* event directly to Clutter ourselves.
*/
if (klass->xevent_filter && klass->xevent_filter (plugin, xev))
return TRUE;
if (klass->xevent_filter)
return klass->xevent_filter (plugin, xev);
else
return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE;
}

View File

@@ -2219,6 +2219,7 @@ check_needs_reshape (MetaWindowActor *self)
MetaFrameBorders borders;
cairo_region_t *region = NULL;
cairo_rectangle_int_t client_area;
gboolean needs_mask;
if (!priv->needs_reshape)
return;
@@ -2270,6 +2271,8 @@ check_needs_reshape (MetaWindowActor *self)
}
#endif
needs_mask = (region != NULL) || (priv->window->frame != NULL);
if (region == NULL)
{
/* If we don't have a shape on the server, that means that
@@ -2278,13 +2281,16 @@ check_needs_reshape (MetaWindowActor *self)
region = cairo_region_create_rectangle (&client_area);
}
/* This takes the region, generates a mask using GTK+
* and scans the mask looking for all opaque pixels,
* adding it to region.
*/
build_and_scan_frame_mask (self, &borders, &client_area, region);
meta_window_actor_update_shape_region (self, region);
if (needs_mask)
{
/* This takes the region, generates a mask using GTK+
* and scans the mask looking for all opaque pixels,
* adding it to region.
*/
build_and_scan_frame_mask (self, &borders, &client_area, region);
}
meta_window_actor_update_shape_region (self, region);
cairo_region_destroy (region);
priv->needs_reshape = FALSE;

View File

@@ -239,6 +239,35 @@ bell_flash_window_frame (MetaWindow *window)
bell_unflash_frame, window->frame, NULL);
}
static MetaWindow *
get_flash_window (MetaDisplay *display,
XkbAnyEvent *xkb_ev)
{
XkbBellNotifyEvent *xkb_bell_event;
MetaWindow *window;
g_assert (xkb_ev->xkb_type == XkbBellNotify);
xkb_bell_event = (XkbBellNotifyEvent *) xkb_ev;
window = meta_display_lookup_x_window (display, xkb_bell_event->window);
if (!window &&
g_hash_table_size (display->focus_info) == 1)
{
GHashTableIter iter;
MetaFocusInfo *info;
/* If there is only one focused window, use it */
g_hash_table_iter_init (&iter, display->focus_info);
if (g_hash_table_iter_next (&iter, NULL, (gpointer *) &info) &&
info->focus_window && info->focus_window->frame)
window = info->focus_window;
}
return window;
}
/**
* bell_flash_frame:
* @display: The display the bell event came in on
@@ -251,15 +280,11 @@ static void
bell_flash_frame (MetaDisplay *display,
XkbAnyEvent *xkb_ev)
{
XkbBellNotifyEvent *xkb_bell_event = (XkbBellNotifyEvent *) xkb_ev;
MetaWindow *window;
g_assert (xkb_ev->xkb_type == XkbBellNotify);
window = meta_display_lookup_x_window (display, xkb_bell_event->window);
if (!window && (display->focus_window))
{
window = display->focus_window;
}
window = get_flash_window (display, xkb_ev);
if (window && window->frame)
{
bell_flash_window_frame (window);
@@ -320,9 +345,7 @@ meta_bell_notify (MetaDisplay *display,
ca_proplist_sets (p, CA_PROP_EVENT_DESCRIPTION, _("Bell event"));
ca_proplist_sets (p, CA_PROP_CANBERRA_CACHE_CONTROL, "permanent");
window = meta_display_lookup_x_window (display, xkb_bell_event->window);
if (!window && (display->focus_window) && (display->focus_window->frame))
window = display->focus_window;
window = get_flash_window (display, xkb_ev);
if (window)
{

View File

@@ -1365,15 +1365,18 @@ constrain_titlebar_visible (MetaWindow *window,
int bottom_amount;
int horiz_amount_offscreen, vert_amount_offscreen;
int horiz_amount_onscreen, vert_amount_onscreen;
MetaGrabInfo *grab_info;
if (priority > PRIORITY_TITLEBAR_VISIBLE)
return TRUE;
grab_info = window->cur_grab;
/* Allow the titlebar beyond the top of the screen only if the user wasn't
* clicking on the frame to start the move.
*/
unconstrained_user_action =
info->is_user_action && !window->display->grab_frame_action;
info->is_user_action && (!grab_info || !grab_info->grab_frame_action);
/* Exit early if we know the constraint won't apply--note that this constraint
* is only meant for normal windows (e.g. we don't want docks to be shoved

View File

@@ -30,6 +30,11 @@
#include <meta/prefs.h>
#include <meta/errors.h>
#ifdef HAVE_XINPUT2
#include <X11/extensions/XInput2.h>
#include "devices-xi2.h"
#endif
/* Looks up the MetaWindow representing the frame of the given X window.
* Used as a helper function by a bunch of the functions below.
*
@@ -245,9 +250,19 @@ lower_window_and_transients (MetaWindow *window,
void
meta_core_user_lower_and_unfocus (Display *xdisplay,
Window frame_xwindow,
int device_id,
guint32 timestamp)
{
MetaWindow *window = get_window (xdisplay, frame_xwindow);
MetaDevice *pointer;
pointer = meta_device_map_lookup (window->display->device_map, device_id);
if (pointer == NULL)
return;
if (!META_IS_DEVICE_POINTER (pointer))
pointer = meta_device_get_paired_device (pointer);
lower_window_and_transients (window, NULL);
@@ -256,6 +271,7 @@ meta_core_user_lower_and_unfocus (Display *xdisplay,
* this will be invoked via keyboard action or by a mouse action;
* in either case the window or a modal child will have been focused.) */
meta_workspace_focus_default_window (window->screen->active_workspace,
pointer,
NULL,
timestamp);
}
@@ -263,16 +279,21 @@ meta_core_user_lower_and_unfocus (Display *xdisplay,
void
meta_core_lower_beneath_grab_window (Display *xdisplay,
Window xwindow,
int device_id,
guint32 timestamp)
{
XWindowChanges changes;
MetaDisplay *display;
MetaScreen *screen;
MetaWindow *grab_window;
MetaDevice *pointer;
MetaGrabInfo *grab_info;
display = meta_display_for_x_display (xdisplay);
screen = meta_display_screen_for_xwindow (display, xwindow);
grab_window = display->grab_window;
pointer = meta_device_map_lookup (display->device_map, device_id);
grab_info = meta_display_get_grab_info (display, pointer);
grab_window = grab_info->grab_window;
if (grab_window == NULL)
return;
@@ -491,18 +512,27 @@ meta_core_get_active_workspace (Screen *xscreen)
void
meta_core_show_window_menu (Display *xdisplay,
Window frame_xwindow,
int device_id,
int root_x,
int root_y,
int button,
guint32 timestamp)
{
MetaWindow *window = get_window (xdisplay, frame_xwindow);
MetaDevice *device;
/* There is already a menu popped up,
* most likely from another device
*/
if (window->menu)
return;
if (meta_prefs_get_raise_on_click ())
meta_window_raise (window);
meta_window_focus (window, timestamp);
meta_window_show_menu (window, root_x, root_y, button, timestamp);
device = meta_device_map_lookup (window->display->device_map, device_id);
meta_window_show_menu (window, device, root_x, root_y, button, timestamp);
}
void
@@ -638,6 +668,7 @@ meta_core_get_workspace_name_with_index (Display *xdisplay,
gboolean
meta_core_begin_grab_op (Display *xdisplay,
Window frame_xwindow,
int device_id,
MetaGrabOp op,
gboolean pointer_already_grabbed,
gboolean frame_action,
@@ -650,13 +681,16 @@ meta_core_begin_grab_op (Display *xdisplay,
MetaWindow *window = get_window (xdisplay, frame_xwindow);
MetaDisplay *display;
MetaScreen *screen;
MetaDevice *device;
display = meta_display_for_x_display (xdisplay);
screen = meta_display_screen_for_xwindow (display, frame_xwindow);
g_assert (screen != NULL);
return meta_display_begin_grab_op (display, screen, window,
device = meta_device_map_lookup (display->device_map, device_id);
return meta_display_begin_grab_op (display, screen, window, device,
op, pointer_already_grabbed,
frame_action,
button, modmask,
@@ -665,57 +699,58 @@ meta_core_begin_grab_op (Display *xdisplay,
void
meta_core_end_grab_op (Display *xdisplay,
int device_id,
guint32 timestamp)
{
MetaDisplay *display;
display = meta_display_for_x_display (xdisplay);
MetaDevice *device;
meta_display_end_grab_op (display, timestamp);
display = meta_display_for_x_display (xdisplay);
device = meta_device_map_lookup (display->device_map, device_id);
meta_display_end_grab_op (display, device, timestamp);
}
MetaGrabOp
meta_core_get_grab_op (Display *xdisplay)
meta_core_frame_has_grab (Display *xdisplay,
Window frame_xwindow,
gint *device_id,
gint *button_ret)
{
MetaDisplay *display;
display = meta_display_for_x_display (xdisplay);
MetaWindow *window;
return display->grab_op;
window = get_window (xdisplay, frame_xwindow);
if (window != NULL &&
window->cur_grab != NULL)
{
if (button_ret)
*button_ret = window->cur_grab->grab_button;
if (device_id)
*device_id = meta_device_get_id (window->cur_grab->grab_pointer);
return window->cur_grab->grab_op;
}
return META_GRAB_OP_NONE;
}
Window
meta_core_get_grab_frame (Display *xdisplay)
meta_core_get_frame (Display *xdisplay,
Window client_xwindow)
{
MetaDisplay *display;
MetaWindow *window;
display = meta_display_for_x_display (xdisplay);
window = meta_display_lookup_x_window (display, client_xwindow);
g_assert (display != NULL);
g_assert (display->grab_op == META_GRAB_OP_NONE ||
display->grab_screen != NULL);
g_assert (display->grab_op == META_GRAB_OP_NONE ||
display->grab_screen->display->xdisplay == xdisplay);
if (display->grab_op != META_GRAB_OP_NONE &&
display->grab_window &&
display->grab_window->frame)
return display->grab_window->frame->xwindow;
else
return None;
}
if (window &&
window->frame)
return window->frame->xwindow;
int
meta_core_get_grab_button (Display *xdisplay)
{
MetaDisplay *display;
display = meta_display_for_x_display (xdisplay);
if (display->grab_op == META_GRAB_OP_NONE)
return -1;
return display->grab_button;
return None;
}
void
@@ -731,13 +766,24 @@ meta_core_grab_buttons (Display *xdisplay,
}
void
meta_core_set_screen_cursor (Display *xdisplay,
Window frame_on_screen,
MetaCursor cursor)
meta_core_set_screen_cursor (Display *xdisplay,
Window frame_on_screen,
gint device_id,
MetaCursor cursor)
{
MetaWindow *window = get_window (xdisplay, frame_on_screen);
MetaDevice *pointer;
meta_frame_set_screen_cursor (window->frame, cursor);
pointer = meta_device_map_lookup (window->display->device_map,
device_id);
if (pointer == NULL)
return;
if (!META_IS_DEVICE_POINTER (pointer))
pointer = meta_device_get_paired_device (pointer);
meta_frame_set_screen_cursor (window->frame, pointer, cursor);
}
void
@@ -775,3 +821,69 @@ meta_invalidate_default_icons (void)
g_slist_free (windows);
}
/* Selects events on an xwindow, using XInput2 if available/in use,
* this function doesn't require the xwindow to have a backing
* MetaWindow.
*/
void
meta_core_select_events (Display *xdisplay,
Window xwindow,
gint evmask,
gboolean preserve_old_mask)
{
MetaDisplay *display;
display = meta_display_for_x_display (xdisplay);
#ifdef HAVE_XINPUT2
if (display->have_xinput2)
{
XIEventMask mask;
mask.deviceid = XIAllMasterDevices;
mask.mask = meta_device_xi2_translate_event_mask (evmask,
&mask.mask_len);
if (preserve_old_mask)
{
XIEventMask *prev;
gint n_masks, i, j;
prev = XIGetSelectedEvents (xdisplay, xwindow, &n_masks);
for (i = 0; i < n_masks; i++)
{
if (prev[i].deviceid != XIAllMasterDevices)
continue;
for (j = 0; j < MIN (mask.mask_len, prev[i].mask_len); j++)
mask.mask[j] |= prev[i].mask[j];
}
XFree (prev);
}
XISelectEvents (xdisplay, xwindow, &mask, 1);
/* Unset any input event so they are only handled via XInput2 */
evmask &= ~(KeyPressMask | KeyReleaseMask |
ButtonPressMask | ButtonReleaseMask |
EnterWindowMask | LeaveWindowMask |
PointerMotionMask | PointerMotionHintMask |
Button1MotionMask | Button2MotionMask |
Button3MotionMask | Button4MotionMask |
Button5MotionMask | ButtonMotionMask |
FocusChangeMask);
}
#endif
if (preserve_old_mask)
{
XWindowAttributes attr;
if (XGetWindowAttributes (xdisplay, xwindow, &attr))
evmask |= attr.your_event_mask;
}
XSelectInput (xdisplay, xwindow, evmask);
}

View File

@@ -110,6 +110,7 @@ void meta_core_user_raise (Display *xdisplay,
Window frame_xwindow);
void meta_core_user_lower_and_unfocus (Display *xdisplay,
Window frame_xwindow,
int device_id,
guint32 timestamp);
void meta_core_user_focus (Display *xdisplay,
@@ -118,6 +119,7 @@ void meta_core_user_focus (Display *xdisplay,
void meta_core_lower_beneath_grab_window (Display *xdisplay,
Window xwindow,
int device_id,
guint32 timestamp);
void meta_core_minimize (Display *xdisplay,
@@ -163,6 +165,7 @@ const char* meta_core_get_workspace_name_with_index (Display *xdisplay,
void meta_core_show_window_menu (Display *xdisplay,
Window frame_xwindow,
int device_id,
int root_x,
int root_y,
int button,
@@ -175,6 +178,7 @@ void meta_core_get_menu_accelerator (MetaMenuOp menu_op,
gboolean meta_core_begin_grab_op (Display *xdisplay,
Window frame_xwindow,
int device_id,
MetaGrabOp op,
gboolean pointer_already_grabbed,
gboolean frame_action,
@@ -184,18 +188,29 @@ gboolean meta_core_begin_grab_op (Display *xdisplay,
int root_x,
int root_y);
void meta_core_end_grab_op (Display *xdisplay,
int device_id,
guint32 timestamp);
MetaGrabOp meta_core_get_grab_op (Display *xdisplay);
Window meta_core_get_grab_frame (Display *xdisplay);
int meta_core_get_grab_button (Display *xdisplay);
MetaGrabOp meta_core_frame_has_grab (Display *xdisplay,
Window frame_xwindow,
gint *device_id,
gint *button_ret);
Window meta_core_get_frame (Display *xdisplay,
Window client_xwindow);
void meta_core_grab_buttons (Display *xdisplay,
Window frame_xwindow);
void meta_core_set_screen_cursor (Display *xdisplay,
Window frame_on_screen,
MetaCursor cursor);
void meta_core_set_screen_cursor (Display *xdisplay,
Window frame_on_screen,
int device_id,
MetaCursor cursor);
void meta_core_select_events (Display *xdisplay,
Window xwindow,
gint evmask,
gboolean preserve_old_mask);
/* Used because we ignore EnterNotify when a window is unmapped that
* really shouldn't cause focus changes, by comparing the event serial

View File

@@ -108,11 +108,7 @@ delete_ping_timeout_func (MetaDisplay *display,
/* Translators: %s is a window title */
if (window_title)
{
char *title = g_strdup_printf ("“%s”", window_title);
tmp = g_strdup_printf (_("%s is not responding."), title);
g_free (title);
}
tmp = g_strdup_printf (_("“%s” is not responding."), window_title);
else
tmp = g_strdup (_("Application is not responding."));

View File

@@ -0,0 +1,69 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/* Keyboard device abstraction */
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>
#include "device-keyboard.h"
G_DEFINE_ABSTRACT_TYPE (MetaDeviceKeyboard,
meta_device_keyboard,
META_TYPE_DEVICE)
static void
meta_device_keyboard_class_init (MetaDeviceKeyboardClass *klass)
{
}
static void
meta_device_keyboard_init (MetaDeviceKeyboard *keyboard)
{
}
Window
meta_device_keyboard_get_focus_window (MetaDeviceKeyboard *keyboard)
{
MetaDeviceKeyboardClass *klass;
g_return_val_if_fail (META_IS_DEVICE_KEYBOARD (keyboard), None);
klass = META_DEVICE_KEYBOARD_GET_CLASS (keyboard);
if (!klass->get_focus_window)
return None;
return (klass->get_focus_window) (keyboard);
}
void
meta_device_keyboard_set_focus_window (MetaDeviceKeyboard *keyboard,
Window xwindow,
Time timestamp)
{
MetaDeviceKeyboardClass *klass;
g_return_if_fail (META_IS_DEVICE_KEYBOARD (keyboard));
klass = META_DEVICE_KEYBOARD_GET_CLASS (keyboard);
if (klass->set_focus_window)
(klass->set_focus_window) (keyboard, xwindow, timestamp);
}

View File

@@ -0,0 +1,69 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/**
* \file device-keyboard.h Keyboard device abstraction
*
* Input devices.
* This file contains the internal abstraction of keyboard devices so
* XInput2/core events can be handled similarly.
*/
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_DEVICE_KEYBOARD_H
#define META_DEVICE_KEYBOARD_H
#include "display-private.h"
#include "device-private.h"
#define META_TYPE_DEVICE_KEYBOARD (meta_device_keyboard_get_type ())
#define META_DEVICE_KEYBOARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_KEYBOARD, MetaDeviceKeyboard))
#define META_DEVICE_KEYBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_KEYBOARD, MetaDeviceKeyboardClass))
#define META_IS_DEVICE_KEYBOARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_KEYBOARD))
#define META_IS_DEVICE_KEYBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_KEYBOARD))
#define META_DEVICE_KEYBOARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_KEYBOARD, MetaDeviceKeyboardClass))
typedef struct _MetaDeviceKeyboard MetaDeviceKeyboard;
typedef struct _MetaDeviceKeyboardClass MetaDeviceKeyboardClass;
struct _MetaDeviceKeyboard
{
MetaDevice parent_instance;
};
struct _MetaDeviceKeyboardClass
{
MetaDeviceClass parent_instance;
Window (* get_focus_window) (MetaDeviceKeyboard *keyboard);
void (* set_focus_window) (MetaDeviceKeyboard *keyboard,
Window xwindow,
Time timestamp);
};
GType meta_device_keyboard_get_type (void) G_GNUC_CONST;
Window meta_device_keyboard_get_focus_window (MetaDeviceKeyboard *keyboard);
void meta_device_keyboard_set_focus_window (MetaDeviceKeyboard *keyboard,
Window xwindow,
Time timestamp);
#endif /* META_DEVICE_KEYBOARD_H */

134
src/core/device-map-core.c Normal file
View File

@@ -0,0 +1,134 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/* Input device map, core protocol implementation */
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include "config.h"
#include "device-map-core.h"
#include "devices-core.h"
G_DEFINE_TYPE (MetaDeviceMapCore, meta_device_map_core, META_TYPE_DEVICE_MAP)
static gboolean
meta_device_map_core_grab_key (MetaDeviceMap *device_map,
Window xwindow,
guint keycode,
guint modifiers,
gboolean sync)
{
MetaDisplay *display;
gint retval;
display = meta_device_map_get_display (device_map);
retval = XGrabKey (display->xdisplay, keycode, modifiers,
xwindow, True,
GrabModeAsync, /* Never care about the other device */
(sync) ? GrabModeSync : GrabModeAsync);
return (retval == Success);
}
static void
meta_device_map_core_ungrab_key (MetaDeviceMap *device_map,
Window xwindow,
guint keycode,
guint modifiers)
{
MetaDisplay *display;
display = meta_device_map_get_display (device_map);
XUngrabKey (display->xdisplay, keycode, modifiers, xwindow);
}
static gboolean
meta_device_map_core_grab_button (MetaDeviceMap *device_map,
Window xwindow,
guint n_button,
guint modifiers,
guint evmask,
gboolean sync)
{
MetaDisplay *display;
gint retval;
display = meta_device_map_get_display (device_map);
retval = XGrabButton (display->xdisplay, n_button,
modifiers, xwindow, False,
evmask,
(sync) ? GrabModeSync : GrabModeAsync,
GrabModeAsync, /* Never care about the other device */
None, None);
return (retval == Success);
}
static void
meta_device_map_core_ungrab_button (MetaDeviceMap *device_map,
Window xwindow,
guint n_button,
guint modifiers)
{
MetaDisplay *display;
display = meta_device_map_get_display (device_map);
XUngrabButton (display->xdisplay, n_button, modifiers, xwindow);
}
static void
meta_device_map_core_constructed (GObject *object)
{
MetaDeviceMap *device_map = META_DEVICE_MAP (object);
MetaDevice *pointer, *keyboard;
MetaDisplay *display;
display = meta_device_map_get_display (device_map);
/* Insert core devices */
pointer = meta_device_pointer_core_new (display);
meta_device_map_add_device (device_map, pointer);
keyboard = meta_device_keyboard_core_new (display);
meta_device_map_add_device (device_map, keyboard);
meta_device_pair_devices (pointer, keyboard);
g_object_unref (pointer);
g_object_unref (keyboard);
}
static void
meta_device_map_core_class_init (MetaDeviceMapCoreClass *klass)
{
MetaDeviceMapClass *device_map_class = META_DEVICE_MAP_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->constructed = meta_device_map_core_constructed;
device_map_class->grab_key = meta_device_map_core_grab_key;
device_map_class->ungrab_key = meta_device_map_core_ungrab_key;
device_map_class->grab_button = meta_device_map_core_grab_button;
device_map_class->ungrab_button = meta_device_map_core_ungrab_button;
}
static void
meta_device_map_core_init (MetaDeviceMapCore *device_map)
{
}

View File

@@ -0,0 +1,56 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/**
* \file device-map-core.h device map for core devices
*
* Input devices.
* This file contains the core protocol implementation of the device map
*/
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_DEVICE_MAP_CORE_H
#define META_DEVICE_MAP_CORE_H
typedef struct _MetaDeviceMapCore MetaDeviceMapCore;
typedef struct _MetaDeviceMapCoreClass MetaDeviceMapCoreClass;
#include "device-map-private.h"
#define META_TYPE_DEVICE_MAP_CORE (meta_device_map_core_get_type ())
#define META_DEVICE_MAP_CORE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_MAP_CORE, MetaDeviceMapCore))
#define META_DEVICE_MAP_CORE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_MAP_CORE, MetaDeviceMapCoreClass))
#define META_IS_DEVICE_MAP_CORE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_MAP_CORE))
#define META_IS_DEVICE_MAP_CORE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_MAP_CORE))
#define META_DEVICE_MAP_CORE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_MAP_CORE, MetaDeviceMapCoreClass))
struct _MetaDeviceMapCore
{
MetaDeviceMap parent_instance;
};
struct _MetaDeviceMapCoreClass
{
MetaDeviceMapClass parent_class;
};
GType meta_device_map_core_get_type (void) G_GNUC_CONST;
#endif /* META_DEVICE_MAP_CORE_H */

View File

@@ -0,0 +1,111 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/**
* \file device-map.h object containing input devices
*
* Input devices.
* This file contains the device map, used to find out the device behind
* XInput2/core events.
*/
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_DEVICE_MAP_PRIVATE_H
#define META_DEVICE_MAP_PRIVATE_H
#include <meta/device-map.h>
#include <meta/device.h>
#include "display-private.h"
#include "device-private.h"
/* Device IDs for Virtual Core Pointer/Keyboard,
* use only in case of emergency.
*/
#define META_CORE_POINTER_ID 2
#define META_CORE_KEYBOARD_ID 3
struct _MetaDeviceMap
{
GObject parent_instance;
gpointer priv;
};
struct _MetaDeviceMapClass
{
GObjectClass parent_instance;
void (* device_added) (MetaDeviceMap *device_map,
MetaDevice *device);
void (* device_removed) (MetaDeviceMap *device_map,
MetaDevice *device);
gboolean (* grab_key) (MetaDeviceMap *device_map,
Window xwindow,
guint keycode,
guint modifiers,
gboolean sync);
void (* ungrab_key) (MetaDeviceMap *device_map,
Window xwindow,
guint keycode,
guint modifiers);
gboolean (* grab_button) (MetaDeviceMap *device_map,
Window xwindow,
guint n_button,
guint modifiers,
guint evmask,
gboolean sync);
void (* ungrab_button) (MetaDeviceMap *pointer,
Window xwindow,
guint n_button,
guint modifiers);
};
GType meta_device_map_get_type (void) G_GNUC_CONST;
MetaDeviceMap * meta_device_map_new (MetaDisplay *display,
gboolean force_core);
void meta_device_map_add_device (MetaDeviceMap *device_map,
MetaDevice *device);
void meta_device_map_remove_device (MetaDeviceMap *device_map,
MetaDevice *device);
gboolean meta_device_map_grab_key (MetaDeviceMap *device_map,
Window xwindow,
guint keycode,
guint modifiers,
gboolean sync);
void meta_device_map_ungrab_key (MetaDeviceMap *device_map,
Window xwindow,
guint keycode,
guint modifiers);
gboolean meta_device_map_grab_button (MetaDeviceMap *device_map,
Window xwindow,
guint n_button,
guint modifiers,
guint evmask,
gboolean sync);
void meta_device_map_ungrab_button (MetaDeviceMap *device_map,
Window xwindow,
guint n_button,
guint modifiers);
#endif /* META_DEVICE_MAP_PRIVATE_H */

269
src/core/device-map-xi2.c Normal file
View File

@@ -0,0 +1,269 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/* Input device map, XInput2 implementation */
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include "config.h"
#include "device-map-xi2.h"
#include <X11/extensions/XInput2.h>
#include "devices-xi2.h"
#define XINPUT2_VERSION_MAJOR 2
#define XINPUT2_VERSION_MINOR 2
G_DEFINE_TYPE (MetaDeviceMapXI2, meta_device_map_xi2, META_TYPE_DEVICE_MAP)
static gboolean
meta_device_map_xi2_grab_key (MetaDeviceMap *device_map,
Window xwindow,
guint keycode,
guint modifiers,
gboolean sync)
{
XIGrabModifiers mods = { modifiers, 0 };
MetaDisplay *display;
XIEventMask mask;
gint retval;
display = meta_device_map_get_display (device_map);
mask.deviceid = XIAllMasterDevices;
mask.mask = meta_device_xi2_translate_event_mask (KeyPressMask |
KeyReleaseMask,
&mask.mask_len);
/* FIXME: Doesn't seem to work with
* XIAllMasterDevices, use the VCK
* at the moment
*/
retval = XIGrabKeycode (display->xdisplay,
META_CORE_KEYBOARD_ID,
keycode, xwindow,
(sync) ? GrabModeSync : GrabModeAsync,
GrabModeAsync, /* Never care about the other device */
True, &mask, 1, &mods);
return (retval == Success);
}
static void
meta_device_map_xi2_ungrab_key (MetaDeviceMap *device_map,
Window xwindow,
guint keycode,
guint modifiers)
{
XIGrabModifiers mods = { modifiers, 0 };
MetaDisplay *display;
display = meta_device_map_get_display (device_map);
XIUngrabKeycode (display->xdisplay,
META_CORE_KEYBOARD_ID,
keycode, xwindow,
1, &mods);
}
static gboolean
meta_device_map_xi2_grab_button (MetaDeviceMap *device_map,
Window xwindow,
guint n_button,
guint modifiers,
guint evmask,
gboolean sync)
{
XIGrabModifiers mods = { modifiers, 0 };
XIEventMask mask;
MetaDisplay *display;
int retval;
display = meta_device_map_get_display (device_map);
mask.deviceid = XIAllMasterDevices;
mask.mask = meta_device_xi2_translate_event_mask (evmask, &mask.mask_len);
retval = XIGrabButton (display->xdisplay,
XIAllMasterDevices,
n_button, xwindow, None,
(sync) ? GrabModeSync : GrabModeAsync,
GrabModeAsync, /* Never care about the other device */
False, &mask, 1, &mods);
return (retval == Success);
}
static void
meta_device_map_xi2_ungrab_button (MetaDeviceMap *device_map,
Window xwindow,
guint n_button,
guint modifiers)
{
XIGrabModifiers mods = { modifiers, 0 };
MetaDisplay *display;
display = meta_device_map_get_display (device_map);
XIUngrabButton (display->xdisplay,
META_CORE_POINTER_ID,
//XIAllMasterDevices,
n_button, xwindow, 1, &mods);
}
static void
add_device_from_info (MetaDeviceMap *device_map,
gint use,
gint device_id)
{
MetaDevice *device;
MetaDisplay *display;
display = meta_device_map_get_display (device_map);
if (use == XIMasterPointer)
device = meta_device_pointer_xi2_new (display, device_id);
else if (use == XIMasterKeyboard)
device = meta_device_keyboard_xi2_new (display, device_id);
if (device)
{
meta_device_map_add_device (device_map, device);
g_object_unref (device);
}
}
static void
pair_devices (gpointer key,
gpointer value,
gpointer user_data)
{
MetaDevice *device1, *device2;
MetaDeviceMap *device_map;
device_map = user_data;
device1 = meta_device_map_lookup (device_map, GPOINTER_TO_INT (key));
device2 = meta_device_map_lookup (device_map, GPOINTER_TO_INT (value));
meta_device_pair_devices (device1, device2);
}
static void
meta_device_map_xi2_constructed (GObject *object)
{
MetaDeviceMap *device_map = META_DEVICE_MAP (object);
MetaDisplay *display;
XIDeviceInfo *info;
GHashTable *pairs;
int n_devices, i;
display = meta_device_map_get_display (device_map);
/* We're only interested in master devices,
* detached slave devices are left for applications
* to handle.
*/
info = XIQueryDevice (display->xdisplay, XIAllMasterDevices, &n_devices);
pairs = g_hash_table_new (NULL, NULL);
for (i = 0; i < n_devices; i++)
{
add_device_from_info (device_map, info[i].use, info[i].deviceid);
g_hash_table_insert (pairs,
GINT_TO_POINTER (info[i].deviceid),
GINT_TO_POINTER (info[i].attachment));
}
g_hash_table_foreach (pairs, pair_devices, device_map);
g_hash_table_destroy (pairs);
XIFreeDeviceInfo (info);
}
static void
meta_device_map_xi2_class_init (MetaDeviceMapXI2Class *klass)
{
MetaDeviceMapClass *device_map_class = META_DEVICE_MAP_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->constructed = meta_device_map_xi2_constructed;
device_map_class->grab_key = meta_device_map_xi2_grab_key;
device_map_class->ungrab_key = meta_device_map_xi2_ungrab_key;
device_map_class->grab_button = meta_device_map_xi2_grab_button;
device_map_class->ungrab_button = meta_device_map_xi2_ungrab_button;
}
static void
meta_device_map_xi2_init (MetaDeviceMapXI2 *device_map)
{
}
gboolean
meta_device_map_xi2_handle_hierarchy_event (MetaDeviceMapXI2 *device_map,
XEvent *ev)
{
MetaDisplay *display;
display = meta_device_map_get_display (META_DEVICE_MAP (device_map));
if (ev->type == GenericEvent &&
ev->xcookie.extension == display->xinput2_opcode)
{
XIHierarchyEvent *xev;
GHashTable *pairs;
gint i;
g_assert (display->have_xinput2 == TRUE);
xev = (XIHierarchyEvent *) ev->xcookie.data;
if (xev->evtype != XI_HierarchyChanged)
return FALSE;
pairs = g_hash_table_new (NULL, NULL);
for (i = 0; i < xev->num_info; i++)
{
if (xev->info[i].flags & XIMasterAdded)
{
add_device_from_info (META_DEVICE_MAP (device_map),
xev->info[i].use,
xev->info[i].deviceid);
g_hash_table_insert (pairs,
GINT_TO_POINTER (xev->info[i].deviceid),
GINT_TO_POINTER (xev->info[i].attachment));
}
else if (xev->info[i].flags & XIMasterRemoved)
{
MetaDevice *device;
device = meta_device_map_lookup (META_DEVICE_MAP (device_map),
xev->info[i].deviceid);
if (device)
meta_device_map_remove_device (META_DEVICE_MAP (device_map),
device);
}
}
g_hash_table_foreach (pairs, pair_devices, device_map);
g_hash_table_destroy (pairs);
return TRUE;
}
return FALSE;
}

59
src/core/device-map-xi2.h Normal file
View File

@@ -0,0 +1,59 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/**
* \file device-map-xi2.h device map for XInput2 devices
*
* Input devices.
* This file contains the XInput2 implementation of the device map
*/
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_DEVICE_MAP_XI2_H
#define META_DEVICE_MAP_XI2_H
typedef struct _MetaDeviceMapXI2 MetaDeviceMapXI2;
typedef struct _MetaDeviceMapXI2Class MetaDeviceMapXI2Class;
#include "device-map-private.h"
#define META_TYPE_DEVICE_MAP_XI2 (meta_device_map_xi2_get_type ())
#define META_DEVICE_MAP_XI2(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_MAP_XI2, MetaDeviceMapXI2))
#define META_DEVICE_MAP_XI2_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_MAP_XI2, MetaDeviceMapXI2Class))
#define META_IS_DEVICE_MAP_XI2(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_MAP_XI2))
#define META_IS_DEVICE_MAP_XI2_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_MAP_XI2))
#define META_DEVICE_MAP_XI2_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_MAP_XI2, MetaDeviceMapXI2Class))
struct _MetaDeviceMapXI2
{
MetaDeviceMap parent_instance;
};
struct _MetaDeviceMapXI2Class
{
MetaDeviceMapClass parent_class;
};
GType meta_device_map_xi2_get_type (void) G_GNUC_CONST;
gboolean meta_device_map_xi2_handle_hierarchy_event (MetaDeviceMapXI2 *device_map,
XEvent *ev);
#endif /* META_DEVICE_MAP_XI2_H */

390
src/core/device-map.c Normal file
View File

@@ -0,0 +1,390 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/* Input device map */
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include "config.h"
#include "device-map-private.h"
#include "device-map-core.h"
#ifdef HAVE_XINPUT2
#include <X11/extensions/XInput2.h>
#include "device-map-xi2.h"
#define XINPUT2_VERSION_MAJOR 2
#define XINPUT2_VERSION_MINOR 2
#endif
G_DEFINE_TYPE (MetaDeviceMap, meta_device_map, G_TYPE_OBJECT)
typedef struct MetaDeviceMapPrivate MetaDeviceMapPrivate;
struct MetaDeviceMapPrivate
{
MetaDisplay *display;
GHashTable *devices;
};
enum {
PROP_0,
PROP_DISPLAY
};
enum {
DEVICE_ADDED,
DEVICE_REMOVED,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
static void
meta_device_map_get_property (GObject *object,
guint param_id,
GValue *value,
GParamSpec *pspec)
{
MetaDeviceMapPrivate *priv;
priv = META_DEVICE_MAP (object)->priv;
switch (param_id)
{
case PROP_DISPLAY:
g_value_set_object (value, priv->display);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
}
}
static void
meta_device_map_set_property (GObject *object,
guint param_id,
const GValue *value,
GParamSpec *pspec)
{
MetaDeviceMapPrivate *priv;
priv = META_DEVICE_MAP (object)->priv;
switch (param_id)
{
case PROP_DISPLAY:
priv->display = g_value_get_object (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
}
}
static void
meta_device_map_finalize (GObject *object)
{
MetaDeviceMapPrivate *priv;
GHashTableIter iter;
MetaDevice *device;
priv = META_DEVICE_MAP (object)->priv;
g_hash_table_iter_init (&iter, priv->devices);
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &device))
{
/* Detach the device */
g_hash_table_iter_steal (&iter);
g_signal_emit (object, signals[DEVICE_REMOVED], 0, device);
g_object_unref (device);
}
g_hash_table_destroy (priv->devices);
G_OBJECT_CLASS (meta_device_map_parent_class)->finalize (object);
}
static void
meta_device_map_class_init (MetaDeviceMapClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->get_property = meta_device_map_get_property;
object_class->set_property = meta_device_map_set_property;
object_class->finalize = meta_device_map_finalize;
g_object_class_install_property (object_class,
PROP_DISPLAY,
g_param_spec_object ("display",
"Display",
"Display",
META_TYPE_DISPLAY,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
signals[DEVICE_ADDED] =
g_signal_new ("device-added",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, META_TYPE_DEVICE);
signals[DEVICE_REMOVED] =
g_signal_new ("device-removed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, META_TYPE_DEVICE);
g_type_class_add_private (klass, sizeof (MetaDeviceMapPrivate));
}
static void
meta_device_map_init (MetaDeviceMap *device_map)
{
MetaDeviceMapPrivate *priv;
priv = device_map->priv = G_TYPE_INSTANCE_GET_PRIVATE (device_map,
META_TYPE_DEVICE_MAP,
MetaDeviceMapPrivate);
priv->devices = g_hash_table_new_full (NULL, NULL, NULL,
(GDestroyNotify) g_object_unref);
}
void
meta_device_map_add_device (MetaDeviceMap *device_map,
MetaDevice *device)
{
MetaDeviceMapPrivate *priv;
priv = device_map->priv;
g_hash_table_insert (priv->devices,
GINT_TO_POINTER (meta_device_get_id (device)),
g_object_ref (device));
g_signal_emit (device_map, signals[DEVICE_ADDED], 0, device);
}
void
meta_device_map_remove_device (MetaDeviceMap *device_map,
MetaDevice *device)
{
MetaDeviceMapPrivate *priv;
priv = device_map->priv;
if (g_hash_table_steal (priv->devices,
GINT_TO_POINTER (meta_device_get_id (device))))
{
g_signal_emit (device_map, signals[DEVICE_REMOVED], 0, device);
g_object_unref (device);
}
}
#ifdef HAVE_XINPUT2
static gboolean
initialize_xinput (MetaDisplay *display)
{
int major, minor, opcode;
int unused;
if (!XQueryExtension (display->xdisplay,
"XInputExtension",
&opcode, &unused, &unused))
return FALSE;
major = XINPUT2_VERSION_MAJOR;
minor = XINPUT2_VERSION_MINOR;
XIQueryVersion (display->xdisplay, &major, &minor);
if (major == XINPUT2_VERSION_MAJOR &&
minor == XINPUT2_VERSION_MINOR)
{
display->have_xinput2 = TRUE;
display->xinput2_opcode = opcode;
return TRUE;
}
return FALSE;
}
#endif /* HAVE_XINPUT2 */
MetaDeviceMap *
meta_device_map_new (MetaDisplay *display,
gboolean force_core)
{
GType type = META_TYPE_DEVICE_MAP_CORE;
#ifdef HAVE_XINPUT2
if (!force_core &&
initialize_xinput (display))
type = META_TYPE_DEVICE_MAP_XI2;
#endif
return g_object_new (type,
"display", display,
NULL);
}
/**
* meta_device_map_lookup:
* @device_map: a #MetaDeviceMap
* @device_id: ID for a device
*
* returns the device corresponding to @device_id
*
* Returns: (transfer none): (allow-none): The matching device, or %NULL.
**/
MetaDevice *
meta_device_map_lookup (MetaDeviceMap *device_map,
gint device_id)
{
MetaDeviceMapPrivate *priv;
g_return_val_if_fail (META_IS_DEVICE_MAP (device_map), NULL);
priv = device_map->priv;
return g_hash_table_lookup (priv->devices,
GINT_TO_POINTER (device_id));
}
/**
* meta_device_map_get_display:
* @device_map: a #MetaDeviceMap
*
* Returns the #MetaDisplay to which @device_map belongs to.
*
* Returns: (transfer none): The #MetaDisplay.
**/
MetaDisplay *
meta_device_map_get_display (MetaDeviceMap *device_map)
{
MetaDeviceMapPrivate *priv;
g_return_val_if_fail (META_IS_DEVICE_MAP (device_map), NULL);
priv = device_map->priv;
return priv->display;
}
/**
* meta_device_map_list_devices:
* @device_map: a #MetaDeviceMap
*
* Returns the list of devices that @device_map holds.
*
* Returns: (element-type Meta.Device) (transfer container): the list
* of devices, the contained objects are owned by @device_map
* and should not be unref'ed. The list must be freed with
* g_list_free().
**/
GList *
meta_device_map_list_devices (MetaDeviceMap *device_map)
{
MetaDeviceMapPrivate *priv;
g_return_val_if_fail (META_IS_DEVICE_MAP (device_map), NULL);
priv = device_map->priv;
return g_hash_table_get_values (priv->devices);
}
gboolean
meta_device_map_grab_key (MetaDeviceMap *device_map,
Window xwindow,
guint keycode,
guint modifiers,
gboolean sync)
{
MetaDeviceMapClass *klass;
g_return_val_if_fail (META_IS_DEVICE_MAP (device_map), FALSE);
g_return_val_if_fail (xwindow != None, FALSE);
klass = META_DEVICE_MAP_GET_CLASS (device_map);
if (!klass->grab_key)
return FALSE;
return (klass->grab_key) (device_map, xwindow, keycode, modifiers, sync);
}
void
meta_device_map_ungrab_key (MetaDeviceMap *device_map,
Window xwindow,
guint keycode,
guint modifiers)
{
MetaDeviceMapClass *klass;
g_return_if_fail (META_IS_DEVICE_MAP (device_map));
g_return_if_fail (xwindow != None);
klass = META_DEVICE_MAP_GET_CLASS (device_map);
if (klass->ungrab_key)
(klass->ungrab_key) (device_map, xwindow, keycode, modifiers);
}
gboolean
meta_device_map_grab_button (MetaDeviceMap *device_map,
Window xwindow,
guint n_button,
guint modifiers,
guint evmask,
gboolean sync)
{
MetaDeviceMapClass *klass;
g_return_val_if_fail (META_IS_DEVICE_MAP (device_map), FALSE);
g_return_val_if_fail (xwindow != None, FALSE);
klass = META_DEVICE_MAP_GET_CLASS (device_map);
if (!klass->grab_button)
return FALSE;
return (klass->grab_button) (device_map, xwindow, n_button,
modifiers, evmask, sync);
}
void
meta_device_map_ungrab_button (MetaDeviceMap *device_map,
Window xwindow,
guint n_button,
guint modifiers)
{
MetaDeviceMapClass *klass;
g_return_if_fail (META_IS_DEVICE_MAP (device_map));
g_return_if_fail (xwindow != None);
klass = META_DEVICE_MAP_GET_CLASS (device_map);
if (klass->ungrab_button)
(klass->ungrab_button) (device_map, xwindow, n_button, modifiers);
}

124
src/core/device-pointer.c Normal file
View File

@@ -0,0 +1,124 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/* Pointer device abstraction */
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>
#include "device-pointer.h"
G_DEFINE_ABSTRACT_TYPE (MetaDevicePointer,
meta_device_pointer,
META_TYPE_DEVICE)
static void
meta_device_pointer_class_init (MetaDevicePointerClass *klass)
{
}
static void
meta_device_pointer_init (MetaDevicePointer *pointer)
{
}
void
meta_device_pointer_warp (MetaDevicePointer *pointer,
MetaScreen *screen,
gint x,
gint y)
{
MetaDevicePointerClass *klass;
g_return_if_fail (META_IS_DEVICE_POINTER (pointer));
g_return_if_fail (META_IS_SCREEN (screen));
klass = META_DEVICE_POINTER_GET_CLASS (pointer);
if (klass->warp)
(klass->warp) (pointer, screen, x, y);
}
void
meta_device_pointer_set_window_cursor (MetaDevicePointer *pointer,
Window xwindow,
MetaCursor cursor)
{
MetaDevicePointerClass *klass;
g_return_if_fail (META_IS_DEVICE_POINTER (pointer));
g_return_if_fail (xwindow != None);
klass = META_DEVICE_POINTER_GET_CLASS (pointer);
if (klass->set_window_cursor)
(klass->set_window_cursor) (pointer, xwindow, cursor);
}
gboolean
meta_device_pointer_query_position (MetaDevicePointer *pointer,
Window xwindow,
Window *root_ret,
Window *child_ret,
gint *root_x_ret,
gint *root_y_ret,
gint *x_ret,
gint *y_ret,
guint *mask_ret)
{
MetaDevicePointerClass *klass;
gint root_x, root_y, x, y;
Window root, child;
gboolean retval;
guint mask;
g_return_val_if_fail (META_IS_DEVICE_POINTER (pointer), FALSE);
g_return_val_if_fail (xwindow != None, FALSE);
klass = META_DEVICE_POINTER_GET_CLASS (pointer);
if (!klass->query_position)
return FALSE;
retval = (klass->query_position) (pointer, xwindow, &root, &child,
&root_x, &root_y, &x, &y, &mask);
if (root_ret)
*root_ret = root;
if (child_ret)
*child_ret = child;
if (root_x_ret)
*root_x_ret = root_x;
if (root_y_ret)
*root_y_ret = root_y;
if (x_ret)
*x_ret = x;
if (y_ret)
*y_ret = y;
if (mask_ret)
*mask_ret = mask;
return retval;
}

95
src/core/device-pointer.h Normal file
View File

@@ -0,0 +1,95 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/**
* \file device-pointer.h Pointer device abstraction
*
* Input devices.
* This file contains the internal abstraction of pointer devices so
* XInput2/core events can be handled similarly.
*/
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_DEVICE_POINTER_H
#define META_DEVICE_POINTER_H
#include "display-private.h"
#include <meta/screen.h>
#include "device-private.h"
#define META_TYPE_DEVICE_POINTER (meta_device_pointer_get_type ())
#define META_DEVICE_POINTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_POINTER, MetaDevicePointer))
#define META_DEVICE_POINTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_POINTER, MetaDevicePointerClass))
#define META_IS_DEVICE_POINTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_POINTER))
#define META_IS_DEVICE_POINTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_POINTER))
#define META_DEVICE_POINTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_POINTER, MetaDevicePointerClass))
typedef struct _MetaDevicePointer MetaDevicePointer;
typedef struct _MetaDevicePointerClass MetaDevicePointerClass;
struct _MetaDevicePointer
{
MetaDevice parent_instance;
};
struct _MetaDevicePointerClass
{
MetaDeviceClass parent_instance;
void (* warp) (MetaDevicePointer *pointer,
MetaScreen *screen,
gint x,
gint y);
void (* set_window_cursor) (MetaDevicePointer *pointer,
Window xwindow,
MetaCursor cursor);
gboolean (* query_position) (MetaDevicePointer *pointer,
Window xwindow,
Window *root,
Window *child,
gint *root_x,
gint *root_y,
gint *x,
gint *y,
guint *mask);
};
GType meta_device_pointer_get_type (void) G_GNUC_CONST;
void meta_device_pointer_warp (MetaDevicePointer *pointer,
MetaScreen *screen,
gint x,
gint y);
void meta_device_pointer_set_window_cursor (MetaDevicePointer *pointer,
Window xwindow,
MetaCursor cursor);
gboolean meta_device_pointer_query_position (MetaDevicePointer *pointer,
Window xwindow,
Window *root,
Window *child,
gint *root_x,
gint *root_y,
gint *x,
gint *y,
guint *mask);
#endif /* META_DEVICE_POINTER_H */

80
src/core/device-private.h Normal file
View File

@@ -0,0 +1,80 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/**
* \file device.h Input device abstraction
*
* Input devices.
* This file contains the internal abstraction of input devices so
* XInput2/core events can be handled similarly.
*/
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_DEVICE_PRIVATE_H
#define META_DEVICE_PRIVATE_H
#include <meta/device.h>
#include "display-private.h"
struct _MetaDevice
{
GObject parent_instance;
gpointer priv;
};
struct _MetaDeviceClass
{
GObjectClass parent_instance;
void (* allow_events) (MetaDevice *device,
int mode,
Time time);
gboolean (* grab) (MetaDevice *device,
Window xwindow,
guint evmask,
MetaCursor cursor,
gboolean owner_events,
gboolean sync,
Time time);
void (* ungrab) (MetaDevice *device,
Time time);
};
GType meta_device_get_type (void) G_GNUC_CONST;
void meta_device_allow_events (MetaDevice *device,
int mode,
Time time);
gboolean meta_device_grab (MetaDevice *device,
Window xwindow,
guint evmask,
MetaCursor cursor,
gboolean owner_events,
gboolean sync,
Time time);
void meta_device_ungrab (MetaDevice *device,
Time time);
void meta_device_pair_devices (MetaDevice *device,
MetaDevice *other_device);
#endif /* META_DEVICE_PRIVATE_H */

270
src/core/device.c Normal file
View File

@@ -0,0 +1,270 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/* Input device abstraction */
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>
#include "device-private.h"
G_DEFINE_ABSTRACT_TYPE (MetaDevice, meta_device, G_TYPE_OBJECT)
enum {
PROP_0,
PROP_DEVICE_ID,
PROP_DISPLAY,
PROP_PAIRED_DEVICE
};
typedef struct MetaDevicePrivate MetaDevicePrivate;
struct MetaDevicePrivate
{
MetaDisplay *display;
MetaDevice *paired_device;
gint device_id;
};
static void
meta_device_get_property (GObject *object,
guint param_id,
GValue *value,
GParamSpec *pspec)
{
switch (param_id)
{
case PROP_DEVICE_ID:
g_value_set_int (value,
meta_device_get_id (META_DEVICE (object)));
break;
case PROP_DISPLAY:
g_value_set_object (value,
meta_device_get_display (META_DEVICE (object)));
break;
case PROP_PAIRED_DEVICE:
g_value_set_object (value,
meta_device_get_paired_device (META_DEVICE (object)));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
}
}
static void
meta_device_set_property (GObject *object,
guint param_id,
const GValue *value,
GParamSpec *pspec)
{
MetaDevicePrivate *priv = META_DEVICE (object)->priv;
switch (param_id)
{
case PROP_DEVICE_ID:
priv->device_id = g_value_get_int (value);
break;
case PROP_DISPLAY:
priv->display = g_value_get_object (value);
break;
case PROP_PAIRED_DEVICE:
meta_device_pair_devices (META_DEVICE (object),
g_value_get_object (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
}
}
static void
meta_device_class_init (MetaDeviceClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->get_property = meta_device_get_property;
object_class->set_property = meta_device_set_property;
g_object_class_install_property (object_class,
PROP_DEVICE_ID,
g_param_spec_int ("device-id",
"Device ID",
"Device ID",
2, G_MAXINT, 2,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class,
PROP_DISPLAY,
g_param_spec_object ("display",
"Display",
"Display",
META_TYPE_DISPLAY,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class,
PROP_PAIRED_DEVICE,
g_param_spec_object ("paired-device",
"Paired device",
"Paired device",
META_TYPE_DEVICE,
G_PARAM_READWRITE));
g_type_class_add_private (klass, sizeof (MetaDevicePrivate));
}
static void
meta_device_init (MetaDevice *device)
{
device->priv = G_TYPE_INSTANCE_GET_PRIVATE (device,
META_TYPE_DEVICE,
MetaDevicePrivate);
}
int
meta_device_get_id (MetaDevice *device)
{
MetaDevicePrivate *priv;
g_return_val_if_fail (META_IS_DEVICE (device), 0);
priv = device->priv;
return priv->device_id;
}
/**
* meta_device_get_display:
* @device: a #MetaDevice
*
* Returns the #MetaDisplay to which the device belongs
*
* Returns: (transfer none): the #MetaDisplay to which the device belongs
**/
MetaDisplay *
meta_device_get_display (MetaDevice *device)
{
MetaDevicePrivate *priv;
g_return_val_if_fail (META_IS_DEVICE (device), NULL);
priv = device->priv;
return priv->display;
}
void
meta_device_allow_events (MetaDevice *device,
int mode,
Time time)
{
MetaDeviceClass *klass;
g_return_if_fail (META_IS_DEVICE (device));
klass = META_DEVICE_GET_CLASS (device);
if (klass->allow_events)
(klass->allow_events) (device, mode, time);
}
gboolean
meta_device_grab (MetaDevice *device,
Window xwindow,
guint evmask,
MetaCursor cursor,
gboolean owner_events,
gboolean sync,
Time time)
{
MetaDeviceClass *klass;
g_return_val_if_fail (META_IS_DEVICE (device), FALSE);
g_return_val_if_fail (xwindow != None, FALSE);
klass = META_DEVICE_GET_CLASS (device);
if (!klass->grab)
return FALSE;
return (klass->grab) (device, xwindow, evmask, cursor,
owner_events, sync, time);
}
void
meta_device_ungrab (MetaDevice *device,
Time time)
{
MetaDeviceClass *klass;
g_return_if_fail (META_IS_DEVICE (device));
klass = META_DEVICE_GET_CLASS (device);
if (klass->ungrab)
(klass->ungrab) (device, time);
}
void
meta_device_pair_devices (MetaDevice *device,
MetaDevice *other_device)
{
MetaDevicePrivate *priv1, *priv2;
g_return_if_fail (META_IS_DEVICE (device));
g_return_if_fail (META_IS_DEVICE (other_device));
priv1 = device->priv;
priv2 = other_device->priv;
/* Consider safe multiple calls
* on already paired devices
*/
if (priv1->paired_device != NULL &&
priv2->paired_device != NULL &&
priv1->paired_device == other_device &&
priv2->paired_device == device)
return;
g_return_if_fail (priv1->paired_device == NULL);
g_return_if_fail (priv2->paired_device == NULL);
priv1->paired_device = g_object_ref (other_device);
priv2->paired_device = g_object_ref (device);
g_object_notify (G_OBJECT (device), "paired-device");
g_object_notify (G_OBJECT (other_device), "paired-device");
}
/**
* meta_device_get_paired_device:
* @device: a #MetaDevice
*
* Returns the paired device. Devices come in keyboard/pointer pairs.
*
* Returns: (transfer none): The paired device.
**/
MetaDevice *
meta_device_get_paired_device (MetaDevice *device)
{
MetaDevicePrivate *priv;
g_return_val_if_fail (META_IS_DEVICE (device), NULL);
priv = device->priv;
return priv->paired_device;
}

256
src/core/devices-core.c Normal file
View File

@@ -0,0 +1,256 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/* Core input devices implementation */
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>
#include "screen-private.h"
#include "devices-core.h"
#include "device-map-private.h"
/* Common functions */
static void
meta_device_core_common_allow_events (MetaDevice *device,
int mode,
Time time)
{
MetaDisplay *display;
display = meta_device_get_display (device);
XAllowEvents (display->xdisplay, mode, time);
}
/* Core pointer */
G_DEFINE_TYPE (MetaDevicePointerCore,
meta_device_pointer_core,
META_TYPE_DEVICE_POINTER)
static gboolean
meta_device_pointer_core_grab (MetaDevice *device,
Window xwindow,
guint evmask,
MetaCursor cursor,
gboolean owner_events,
gboolean sync,
Time time)
{
MetaDisplay *display;
Cursor xcursor;
int retval;
display = meta_device_get_display (device);
xcursor = meta_display_create_x_cursor (display, cursor);
retval = XGrabPointer (display->xdisplay,
xwindow, owner_events,
evmask,
(sync) ? GrabModeSync : GrabModeAsync,
(sync) ? GrabModeSync : GrabModeAsync,
None, xcursor, time);
if (xcursor != None)
XFreeCursor (display->xdisplay, xcursor);
return (retval == Success);
}
static void
meta_device_pointer_core_ungrab (MetaDevice *device,
Time time)
{
MetaDisplay *display;
display = meta_device_get_display (device);
XUngrabPointer (display->xdisplay, time);
}
static void
meta_device_pointer_core_warp (MetaDevicePointer *pointer,
MetaScreen *screen,
gint x,
gint y)
{
MetaDisplay *display;
display = meta_device_get_display (META_DEVICE (pointer));
XWarpPointer (display->xdisplay,
None, screen->xroot,
0, 0, 0, 0, x, y);
}
static void
meta_device_pointer_core_set_window_cursor (MetaDevicePointer *pointer,
Window xwindow,
MetaCursor cursor)
{
MetaDisplay *display;
Cursor xcursor;
display = meta_device_get_display (META_DEVICE (pointer));
xcursor = meta_display_create_x_cursor (display, cursor);
XDefineCursor (display->xdisplay, xwindow, xcursor);
if (xcursor != None)
XFreeCursor (display->xdisplay, xcursor);
}
static gboolean
meta_device_pointer_core_query_position (MetaDevicePointer *pointer,
Window xwindow,
Window *root,
Window *child,
gint *root_x,
gint *root_y,
gint *x,
gint *y,
guint *mask)
{
MetaDisplay *display;
display = meta_device_get_display (META_DEVICE (pointer));
return XQueryPointer (display->xdisplay, xwindow,
root, child, root_x, root_y,
x, y, mask);
}
static void
meta_device_pointer_core_class_init (MetaDevicePointerCoreClass *klass)
{
MetaDevicePointerClass *pointer_class = META_DEVICE_POINTER_CLASS (klass);
MetaDeviceClass *device_class = META_DEVICE_CLASS (klass);
device_class->allow_events = meta_device_core_common_allow_events;
device_class->grab = meta_device_pointer_core_grab;
device_class->ungrab = meta_device_pointer_core_ungrab;
pointer_class->warp = meta_device_pointer_core_warp;
pointer_class->set_window_cursor = meta_device_pointer_core_set_window_cursor;
pointer_class->query_position = meta_device_pointer_core_query_position;
}
static void
meta_device_pointer_core_init (MetaDevicePointerCore *pointer)
{
}
MetaDevice *
meta_device_pointer_core_new (MetaDisplay *display)
{
return g_object_new (META_TYPE_DEVICE_POINTER_CORE,
"device-id", META_CORE_POINTER_ID,
"display", display,
NULL);
}
/* Core Keyboard */
G_DEFINE_TYPE (MetaDeviceKeyboardCore,
meta_device_keyboard_core,
META_TYPE_DEVICE_KEYBOARD)
static gboolean
meta_device_keyboard_core_grab (MetaDevice *device,
Window xwindow,
guint evmask,
MetaCursor cursor,
gboolean owner_events,
gboolean sync,
Time time)
{
MetaDisplay *display;
gint retval;
display = meta_device_get_display (device);
retval = XGrabKeyboard (display->xdisplay, xwindow, owner_events,
(sync) ? GrabModeSync : GrabModeAsync,
(sync) ? GrabModeSync : GrabModeAsync,
time);
return (retval == Success);
}
static void
meta_device_keyboard_core_ungrab (MetaDevice *device,
Time time)
{
MetaDisplay *display;
display = meta_device_get_display (device);
XUngrabKeyboard (display->xdisplay, time);
}
static Window
meta_device_keyboard_core_get_focus_window (MetaDeviceKeyboard *keyboard)
{
MetaDisplay *display;
Window xwindow;
int unused;
display = meta_device_get_display (META_DEVICE (keyboard));
XGetInputFocus (display->xdisplay, &xwindow, &unused);
return xwindow;
}
static void
meta_device_keyboard_core_set_focus_window (MetaDeviceKeyboard *keyboard,
Window xwindow,
Time timestamp)
{
MetaDisplay *display;
display = meta_device_get_display (META_DEVICE (keyboard));
XSetInputFocus (display->xdisplay,
xwindow,
RevertToPointerRoot,
timestamp);
}
static void
meta_device_keyboard_core_class_init (MetaDeviceKeyboardCoreClass *klass)
{
MetaDeviceKeyboardClass *keyboard_class = META_DEVICE_KEYBOARD_CLASS (klass);
MetaDeviceClass *device_class = META_DEVICE_CLASS (klass);
keyboard_class->get_focus_window = meta_device_keyboard_core_get_focus_window;
keyboard_class->set_focus_window = meta_device_keyboard_core_set_focus_window;
device_class->allow_events = meta_device_core_common_allow_events;
device_class->grab = meta_device_keyboard_core_grab;
device_class->ungrab = meta_device_keyboard_core_ungrab;
}
static void
meta_device_keyboard_core_init (MetaDeviceKeyboardCore *keyboard)
{
}
MetaDevice *
meta_device_keyboard_core_new (MetaDisplay *display)
{
return g_object_new (META_TYPE_DEVICE_KEYBOARD_CORE,
"device-id", META_CORE_KEYBOARD_ID,
"display", display,
NULL);
}

85
src/core/devices-core.h Normal file
View File

@@ -0,0 +1,85 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/**
* \file devices-core.h Core input devices implementation
*
* Input devices.
* This file contains the core X protocol implementation of input devices.
*/
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_DEVICES_CORE_H
#define META_DEVICES_CORE_H
#include "device-pointer.h"
#include "device-keyboard.h"
/* Pointer */
#define META_TYPE_DEVICE_POINTER_CORE (meta_device_pointer_core_get_type ())
#define META_DEVICE_POINTER_CORE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_POINTER_CORE, MetaDevicePointerCore))
#define META_DEVICE_POINTER_CORE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_POINTER_CORE, MetaDevicePointerCoreClass))
#define META_IS_DEVICE_POINTER_CORE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_POINTER_CORE))
#define META_IS_DEVICE_POINTER_CORE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_POINTER_CORE))
#define META_DEVICE_POINTER_CORE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_POINTER_CORE, MetaDevicePointerCoreClass))
typedef struct _MetaDevicePointerCore MetaDevicePointerCore;
typedef struct _MetaDevicePointerCoreClass MetaDevicePointerCoreClass;
struct _MetaDevicePointerCore
{
MetaDevicePointer parent_instance;
};
struct _MetaDevicePointerCoreClass
{
MetaDevicePointerClass parent_class;
};
GType meta_device_pointer_core_get_type (void) G_GNUC_CONST;
MetaDevice *meta_device_pointer_core_new (MetaDisplay *display);
/* Keyboard */
#define META_TYPE_DEVICE_KEYBOARD_CORE (meta_device_keyboard_core_get_type ())
#define META_DEVICE_KEYBOARD_CORE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_KEYBOARD_CORE, MetaDeviceKeyboardCore))
#define META_DEVICE_KEYBOARD_CORE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_KEYBOARD_CORE, MetaDeviceKeyboardCoreClass))
#define META_IS_DEVICE_KEYBOARD_CORE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_KEYBOARD_CORE))
#define META_IS_DEVICE_KEYBOARD_CORE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_KEYBOARD_CORE))
#define META_DEVICE_KEYBOARD_CORE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_KEYBOARD_CORE, MetaDeviceKeyboardCoreClass))
typedef struct _MetaDeviceKeyboardCore MetaDeviceKeyboardCore;
typedef struct _MetaDeviceKeyboardCoreClass MetaDeviceKeyboardCoreClass;
struct _MetaDeviceKeyboardCore
{
MetaDeviceKeyboard parent_instance;
};
struct _MetaDeviceKeyboardCoreClass
{
MetaDeviceKeyboardClass parent_class;
};
GType meta_device_keyboard_core_get_type (void) G_GNUC_CONST;
MetaDevice *meta_device_keyboard_core_new (MetaDisplay *display);
#endif /* META_DEVICES_CORE_H */

343
src/core/devices-xi2.c Normal file
View File

@@ -0,0 +1,343 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/* XInput2 devices implementation */
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>
#include "devices-xi2.h"
#include "display-private.h"
#include "screen-private.h"
#include <X11/extensions/XInput2.h>
/* Common functions */
static void
meta_device_xi2_common_allow_events (MetaDevice *device,
int mode,
Time time)
{
MetaDisplay *display;
gint device_id;
display = meta_device_get_display (device);
device_id = meta_device_get_id (device);
switch (mode)
{
case AsyncPointer:
case AsyncKeyboard:
mode = XIAsyncDevice;
break;
case SyncPointer:
case SyncKeyboard:
mode = XISyncDevice;
break;
case ReplayPointer:
case ReplayKeyboard:
mode = XIReplayDevice;
break;
case AsyncBoth:
mode = XIAsyncPair;
break;
case SyncBoth:
mode = XISyncPair;
break;
}
XIAllowEvents (display->xdisplay, device_id, mode, time);
}
guchar *
meta_device_xi2_translate_event_mask (guint evmask,
gint *len)
{
guchar *mask;
*len = XIMaskLen (XI_LASTEVENT);
mask = g_new0 (guchar, *len);
if (evmask & KeyPressMask)
XISetMask (mask, XI_KeyPress);
if (evmask & KeyReleaseMask)
XISetMask (mask, XI_KeyRelease);
if (evmask & ButtonPressMask)
XISetMask (mask, XI_ButtonPress);
if (evmask & ButtonReleaseMask)
XISetMask (mask, XI_ButtonRelease);
if (evmask & EnterWindowMask)
XISetMask (mask, XI_Enter);
if (evmask & LeaveWindowMask)
XISetMask (mask, XI_Leave);
/* No motion hints in XI2 at the moment... */
if (evmask & PointerMotionMask ||
evmask & PointerMotionHintMask)
XISetMask (mask, XI_Motion);
if (evmask & FocusChangeMask)
{
XISetMask (mask, XI_FocusIn);
XISetMask (mask, XI_FocusOut);
}
return mask;
}
static gboolean
meta_device_xi2_common_grab (MetaDevice *device,
Window xwindow,
guint evmask,
MetaCursor cursor,
gboolean owner_events,
gboolean sync,
Time time)
{
MetaDisplay *display;
XIEventMask mask;
gint device_id, retval;
Cursor xcursor;
display = meta_device_get_display (device);
device_id = meta_device_get_id (device);
xcursor = meta_display_create_x_cursor (display, cursor);
mask.deviceid = device_id;
mask.mask = meta_device_xi2_translate_event_mask (evmask, &mask.mask_len);
retval = XIGrabDevice (display->xdisplay,
device_id, xwindow,
time, xcursor,
(sync) ? GrabModeSync : GrabModeAsync,
(sync) ? GrabModeSync : GrabModeAsync,
owner_events, &mask);
if (xcursor != None)
XFreeCursor (display->xdisplay, xcursor);
return (retval == Success);
}
static void
meta_device_xi2_common_ungrab (MetaDevice *device,
Time time)
{
MetaDisplay *display;
gint device_id;
display = meta_device_get_display (device);
device_id = meta_device_get_id (device);
XIUngrabDevice (display->xdisplay, device_id, time);
}
/* Pointer */
G_DEFINE_TYPE (MetaDevicePointerXI2,
meta_device_pointer_xi2,
META_TYPE_DEVICE_POINTER)
static void
meta_device_pointer_xi2_warp (MetaDevicePointer *pointer,
MetaScreen *screen,
gint x,
gint y)
{
MetaDisplay *display;
int device_id;
display = meta_device_get_display (META_DEVICE (pointer));
device_id = meta_device_get_id (META_DEVICE (pointer));
XIWarpPointer (display->xdisplay,
device_id,
None, screen->xroot,
0, 0, 0, 0, x, y);
}
static void
meta_device_pointer_xi2_set_window_cursor (MetaDevicePointer *pointer,
Window xwindow,
MetaCursor cursor)
{
MetaDisplay *display;
Cursor xcursor;
int device_id;
display = meta_device_get_display (META_DEVICE (pointer));
device_id = meta_device_get_id (META_DEVICE (pointer));
xcursor = meta_display_create_x_cursor (display, cursor);
if (xcursor != None)
{
XIDefineCursor (display->xdisplay, device_id, xwindow, xcursor);
XFreeCursor (display->xdisplay, xcursor);
}
else
XIUndefineCursor (display->xdisplay, device_id, xwindow);
}
static gboolean
meta_device_pointer_xi2_query_position (MetaDevicePointer *pointer,
Window xwindow,
Window *root_ret,
Window *child_ret,
gint *root_x_ret,
gint *root_y_ret,
gint *x_ret,
gint *y_ret,
guint *mask_ret)
{
MetaDisplay *display;
XIModifierState mods;
XIGroupState group_unused;
XIButtonState buttons;
gdouble root_x, root_y, x, y;
int device_id;
gboolean retval;
display = meta_device_get_display (META_DEVICE (pointer));
device_id = meta_device_get_id (META_DEVICE (pointer));
retval = XIQueryPointer (display->xdisplay,
device_id, xwindow,
root_ret, child_ret,
&root_x, &root_y, &x, &y,
&buttons, &mods,
&group_unused);
if (mask_ret)
{
*mask_ret = mods.effective;
if (XIMaskIsSet (buttons.mask, 1))
*mask_ret |= Button1Mask;
else if (XIMaskIsSet (buttons.mask, 2))
*mask_ret |= Button2Mask;
else if (XIMaskIsSet (buttons.mask, 3))
*mask_ret |= Button3Mask;
}
if (root_x_ret)
*root_x_ret = (int) root_x;
if (root_y_ret)
*root_y_ret = (int) root_y;
if (x_ret)
*x_ret = (int) x;
if (y_ret)
*y_ret = (int) y;
return retval;
}
static void
meta_device_pointer_xi2_class_init (MetaDevicePointerXI2Class *klass)
{
MetaDevicePointerClass *pointer_class = META_DEVICE_POINTER_CLASS (klass);
MetaDeviceClass *device_class = META_DEVICE_CLASS (klass);
device_class->allow_events = meta_device_xi2_common_allow_events;
device_class->grab = meta_device_xi2_common_grab;
device_class->ungrab = meta_device_xi2_common_ungrab;
pointer_class->warp = meta_device_pointer_xi2_warp;
pointer_class->set_window_cursor = meta_device_pointer_xi2_set_window_cursor;
pointer_class->query_position = meta_device_pointer_xi2_query_position;
}
static void
meta_device_pointer_xi2_init (MetaDevicePointerXI2 *pointer)
{
}
MetaDevice *
meta_device_pointer_xi2_new (MetaDisplay *display,
gint device_id)
{
return g_object_new (META_TYPE_DEVICE_POINTER_XI2,
"device-id", device_id,
"display", display,
NULL);
}
/* Keyboard */
G_DEFINE_TYPE (MetaDeviceKeyboardXI2,
meta_device_keyboard_xi2,
META_TYPE_DEVICE_KEYBOARD)
static Window
meta_device_keyboard_xi2_get_focus_window (MetaDeviceKeyboard *keyboard)
{
MetaDisplay *display;
Window xwindow;
display = meta_device_get_display (META_DEVICE (keyboard));
XIGetFocus (display->xdisplay,
meta_device_get_id (META_DEVICE (keyboard)),
&xwindow);
return xwindow;
}
static void
meta_device_keyboard_xi2_set_focus_window (MetaDeviceKeyboard *keyboard,
Window xwindow,
Time timestamp)
{
MetaDisplay *display;
display = meta_device_get_display (META_DEVICE (keyboard));
XISetFocus (display->xdisplay,
meta_device_get_id (META_DEVICE (keyboard)),
xwindow,
timestamp);
}
static void
meta_device_keyboard_xi2_class_init (MetaDeviceKeyboardXI2Class *klass)
{
MetaDeviceKeyboardClass *keyboard_class = META_DEVICE_KEYBOARD_CLASS (klass);
MetaDeviceClass *device_class = META_DEVICE_CLASS (klass);
keyboard_class->get_focus_window = meta_device_keyboard_xi2_get_focus_window;
keyboard_class->set_focus_window = meta_device_keyboard_xi2_set_focus_window;
device_class->allow_events = meta_device_xi2_common_allow_events;
device_class->grab = meta_device_xi2_common_grab;
device_class->ungrab = meta_device_xi2_common_ungrab;
}
static void
meta_device_keyboard_xi2_init (MetaDeviceKeyboardXI2 *keyboard)
{
}
MetaDevice *
meta_device_keyboard_xi2_new (MetaDisplay *display,
gint device_id)
{
return g_object_new (META_TYPE_DEVICE_KEYBOARD_XI2,
"device-id", device_id,
"display", display,
NULL);
}

92
src/core/devices-xi2.h Normal file
View File

@@ -0,0 +1,92 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/**
* \file devices-xi2.h XInput2 input devices implementation
*
* Input devices.
* This file contains the XInput2 implementation of input devices.
*/
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_DEVICES_XI2_H
#define META_DEVICES_XI2_H
#include "device-pointer.h"
#include "device-keyboard.h"
/* Pointer */
#define META_TYPE_DEVICE_POINTER_XI2 (meta_device_pointer_xi2_get_type ())
#define META_DEVICE_POINTER_XI2(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_POINTER_XI2, MetaDevicePointerXI2))
#define META_DEVICE_POINTER_XI2_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_POINTER_XI2, MetaDevicePointerXI2Class))
#define META_IS_DEVICE_POINTER_XI2(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_POINTER_XI2))
#define META_IS_DEVICE_POINTER_XI2_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_POINTER_XI2))
#define META_DEVICE_POINTER_XI2_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_POINTER_XI2, MetaDevicePointerXI2Class))
typedef struct _MetaDevicePointerXI2 MetaDevicePointerXI2;
typedef struct _MetaDevicePointerXI2Class MetaDevicePointerXI2Class;
struct _MetaDevicePointerXI2
{
MetaDevicePointer parent_instance;
};
struct _MetaDevicePointerXI2Class
{
MetaDevicePointerClass parent_class;
};
GType meta_device_pointer_xi2_get_type (void) G_GNUC_CONST;
MetaDevice *meta_device_pointer_xi2_new (MetaDisplay *display,
gint device_id);
/* Keyboard */
#define META_TYPE_DEVICE_KEYBOARD_XI2 (meta_device_keyboard_xi2_get_type ())
#define META_DEVICE_KEYBOARD_XI2(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_KEYBOARD_XI2, MetaDeviceKeyboardXI2))
#define META_DEVICE_KEYBOARD_XI2_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_KEYBOARD_XI2, MetaDeviceKeyboardXI2Class))
#define META_IS_DEVICE_KEYBOARD_XI2(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_KEYBOARD_XI2))
#define META_IS_DEVICE_KEYBOARD_XI2_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_KEYBOARD_XI2))
#define META_DEVICE_KEYBOARD_XI2_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_KEYBOARD_XI2, MetaDeviceKeyboardXI2Class))
typedef struct _MetaDeviceKeyboardXI2 MetaDeviceKeyboardXI2;
typedef struct _MetaDeviceKeyboardXI2Class MetaDeviceKeyboardXI2Class;
struct _MetaDeviceKeyboardXI2
{
MetaDeviceKeyboard parent_instance;
};
struct _MetaDeviceKeyboardXI2Class
{
MetaDeviceKeyboardClass parent_class;
};
GType meta_device_keyboard_xi2_get_type (void) G_GNUC_CONST;
MetaDevice *meta_device_keyboard_xi2_new (MetaDisplay *display,
gint device_id);
/* Helper function for translating event masks */
guchar * meta_device_xi2_translate_event_mask (guint evmask,
gint *len);
#endif /* META_DEVICES_XI2_H */

View File

@@ -38,6 +38,7 @@
#include <meta/boxes.h>
#include <meta/display.h>
#include "keybindings-private.h"
#include "device-map-private.h"
#include <meta/prefs.h>
#ifdef HAVE_STARTUP_NOTIFICATION
@@ -56,6 +57,9 @@ typedef struct _MetaWindowPropHooks MetaWindowPropHooks;
typedef struct MetaEdgeResistanceData MetaEdgeResistanceData;
typedef struct _MetaGrabInfo MetaGrabInfo;
typedef struct _MetaFocusInfo MetaFocusInfo;
typedef void (* MetaWindowPingFunc) (MetaDisplay *display,
Window xwindow,
guint32 timestamp,
@@ -86,6 +90,67 @@ typedef enum {
META_TILE_MAXIMIZED
} MetaTileMode;
struct _MetaGrabInfo
{
MetaDevice *grab_pointer;
MetaDevice *grab_keyboard;
MetaGrabOp grab_op;
MetaScreen *grab_screen;
MetaWindow *grab_window;
Window grab_xwindow;
int grab_button;
int grab_anchor_root_x;
int grab_anchor_root_y;
MetaRectangle grab_anchor_window_pos;
MetaTileMode grab_tile_mode;
int grab_tile_monitor_number;
int grab_latest_motion_x;
int grab_latest_motion_y;
gulong grab_mask;
guint grab_have_pointer : 1;
guint grab_have_keyboard : 1;
guint grab_frame_action : 1;
/* During a resize operation, the directions in which we've broken
* out of the initial maximization state */
guint grab_resize_unmaximize : 2; /* MetaMaximizeFlags */
MetaRectangle grab_initial_window_pos;
int grab_initial_x, grab_initial_y; /* These are only relevant for */
gboolean grab_threshold_movement_reached; /* raise_on_click == FALSE. */
MetaResizePopup *grab_resize_popup;
GTimeVal grab_last_moveresize_time;
guint32 grab_motion_notify_time;
GList* grab_old_window_stacking;
unsigned int grab_last_user_action_was_snap;
MetaEdgeResistanceData *grab_edge_resistance_data;
#ifdef HAVE_XSYNC
/* alarm monitoring client's _NET_WM_SYNC_REQUEST_COUNTER */
XSyncAlarm grab_sync_request_alarm;
#endif
int grab_resize_timeout_id;
};
struct _MetaFocusInfo
{
/* This is the actual window from focus events,
* not the one we last set
*/
MetaWindow *focus_window;
/* window we are expecting a FocusIn event for or the current focus
* window if we are not expecting any FocusIn/FocusOut events; not
* perfect because applications can call XSetInputFocus directly.
* (It could also be messed up if a timestamp later than current
* time is sent to meta_display_set_input_focus_window, though that
* would be a programming error). See bug 154598 for more info.
*/
MetaWindow *expected_focus_window;
/* last timestamp passed to XSetInputFocus */
guint32 last_focus_time;
};
struct _MetaDisplay
{
GObject parent_instance;
@@ -104,22 +169,8 @@ struct _MetaDisplay
#include <meta/atomnames.h>
#undef item
/* This is the actual window from focus events,
* not the one we last set
*/
MetaWindow *focus_window;
/* window we are expecting a FocusIn event for or the current focus
* window if we are not expecting any FocusIn/FocusOut events; not
* perfect because applications can call XSetInputFocus directly.
* (It could also be messed up if a timestamp later than current
* time is sent to meta_display_set_input_focus_window, though that
* would be a programming error). See bug 154598 for more info.
*/
MetaWindow *expected_focus_window;
/* last timestamp passed to XSetInputFocus */
guint32 last_focus_time;
/* keyboard -> MetaFocusInfo hashtable */
GHashTable *focus_info;
/* last user interaction time in any app */
guint32 last_user_time;
@@ -172,6 +223,9 @@ struct _MetaDisplay
/* Pings which we're waiting for a reply from */
GSList *pending_pings;
/* Pending focus change */
guint focus_timeout_id;
/* Pending autoraise */
guint autoraise_timeout_id;
MetaWindow* autoraise_window;
@@ -179,35 +233,11 @@ struct _MetaDisplay
/* Alt+click button grabs */
unsigned int window_grab_modifiers;
/* current window operation */
MetaGrabOp grab_op;
MetaScreen *grab_screen;
MetaWindow *grab_window;
Window grab_xwindow;
int grab_button;
int grab_anchor_root_x;
int grab_anchor_root_y;
MetaRectangle grab_anchor_window_pos;
MetaTileMode grab_tile_mode;
int grab_tile_monitor_number;
int grab_latest_motion_x;
int grab_latest_motion_y;
gulong grab_mask;
guint grab_have_pointer : 1;
guint grab_have_keyboard : 1;
guint grab_frame_action : 1;
/* During a resize operation, the directions in which we've broken
* out of the initial maximization state */
guint grab_resize_unmaximize : 2; /* MetaMaximizeFlags */
MetaRectangle grab_initial_window_pos;
int grab_initial_x, grab_initial_y; /* These are only relevant for */
gboolean grab_threshold_movement_reached; /* raise_on_click == FALSE. */
MetaResizePopup *grab_resize_popup;
GTimeVal grab_last_moveresize_time;
guint32 grab_motion_notify_time;
GList* grab_old_window_stacking;
MetaEdgeResistanceData *grab_edge_resistance_data;
unsigned int grab_last_user_action_was_snap;
/* per-device current window operation */
GHashTable *current_grabs;
/* per-screen edge resistance cache */
GHashTable *edge_resistance_info;
/* we use property updates as sentinels for certain window focus events
* to avoid some race conditions on EnterNotify events
@@ -218,11 +248,6 @@ struct _MetaDisplay
int xkb_base_event_type;
guint32 last_bell_time;
#endif
#ifdef HAVE_XSYNC
/* alarm monitoring client's _NET_WM_SYNC_REQUEST_COUNTER */
XSyncAlarm grab_sync_request_alarm;
#endif
int grab_resize_timeout_id;
/* Keybindings stuff */
MetaKeyBinding *key_bindings;
@@ -269,6 +294,9 @@ struct _MetaDisplay
/* Managed by compositor.c */
MetaCompositor *compositor;
/* Managed by device-map.c */
MetaDeviceMap *device_map;
int render_event_base;
int render_error_base;
@@ -292,6 +320,12 @@ struct _MetaDisplay
int shape_event_base;
int shape_error_base;
#endif
#ifdef HAVE_XINPUT2
int xinput2_opcode;
unsigned int have_xinput2 : 1;
#endif
#ifdef HAVE_XSYNC
unsigned int have_xsync : 1;
#define META_DISPLAY_HAS_XSYNC(display) ((display)->have_xsync)
@@ -377,12 +411,14 @@ Cursor meta_display_create_x_cursor (MetaDisplay *display,
void meta_display_set_grab_op_cursor (MetaDisplay *display,
MetaScreen *screen,
MetaDevice *device,
MetaGrabOp op,
gboolean change_pointer,
Window grab_xwindow,
guint32 timestamp);
void meta_display_check_threshold_reached (MetaDisplay *display,
MetaDevice *device,
int x,
int y);
void meta_display_grab_window_buttons (MetaDisplay *display,
@@ -396,7 +432,8 @@ void meta_display_ungrab_focus_window_button (MetaDisplay *display,
MetaWindow *window);
/* Next function is defined in edge-resistance.c */
void meta_display_cleanup_edges (MetaDisplay *display);
void meta_display_cleanup_edges (MetaDisplay *display,
MetaScreen *screen);
/* make a request to ensure the event serial has changed */
void meta_display_increment_event_serial (MetaDisplay *display);
@@ -444,4 +481,15 @@ void meta_display_overlay_key_activate (MetaDisplay *display);
/* In above-tab-keycode.c */
guint meta_display_get_above_tab_keycode (MetaDisplay *display);
MetaGrabInfo * meta_display_create_grab_info (MetaDisplay *display,
MetaDevice *device);
void meta_display_remove_grab_info (MetaDisplay *display,
MetaDevice *device);
MetaGrabInfo * meta_display_get_grab_info (MetaDisplay *display,
MetaDevice *device);
MetaFocusInfo * meta_display_get_focus_info (MetaDisplay *display,
MetaDevice *device);
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -30,12 +30,12 @@
/* A simple macro for whether a given window's edges are potentially
* relevant for resistance/snapping during a move/resize operation
*/
#define WINDOW_EDGES_RELEVANT(window, display) \
meta_window_should_be_showing (window) && \
window->screen == display->grab_screen && \
window != display->grab_window && \
window->type != META_WINDOW_DESKTOP && \
window->type != META_WINDOW_MENU && \
#define WINDOW_EDGES_RELEVANT(window, display, screen) \
meta_window_should_be_showing (window) && \
window->screen == screen && \
window->cur_grab == NULL && \
window->type != META_WINDOW_DESKTOP && \
window->type != META_WINDOW_MENU && \
window->type != META_WINDOW_SPLASHSCREEN
struct ResistanceDataForAnEdge
@@ -44,8 +44,9 @@ struct ResistanceDataForAnEdge
guint timeout_id;
int timeout_edge_pos;
gboolean timeout_over;
GSourceFunc timeout_func;
MetaEdgeResistanceFunc timeout_func;
MetaWindow *window;
MetaDevice *device;
int keyboard_buildup;
};
typedef struct ResistanceDataForAnEdge ResistanceDataForAnEdge;
@@ -63,7 +64,9 @@ struct MetaEdgeResistanceData
ResistanceDataForAnEdge bottom_data;
};
static void compute_resistance_and_snapping_edges (MetaDisplay *display);
static MetaEdgeResistanceData *
compute_resistance_and_snapping_edges (MetaDisplay *display,
MetaScreen *screen);
/* !WARNING!: this function can return invalid indices (namely, either -1 or
* edges->len); this is by design, but you need to remember this.
@@ -318,20 +321,22 @@ edge_resistance_timeout (gpointer data)
resistance_data->timeout_over = TRUE;
resistance_data->timeout_id = 0;
(*resistance_data->timeout_func)(resistance_data->window);
(*resistance_data->timeout_func) (resistance_data->window,
resistance_data->device);
return FALSE;
}
static int
apply_edge_resistance (MetaWindow *window,
MetaDevice *device,
int old_pos,
int new_pos,
const MetaRectangle *old_rect,
const MetaRectangle *new_rect,
GArray *edges,
ResistanceDataForAnEdge *resistance_data,
GSourceFunc timeout_func,
MetaEdgeResistanceFunc timeout_func,
gboolean xdir,
gboolean keyboard_op)
{
@@ -445,6 +450,7 @@ apply_edge_resistance (MetaWindow *window,
resistance_data->timeout_over = FALSE;
resistance_data->timeout_func = timeout_func;
resistance_data->window = window;
resistance_data->device = device;
}
if (!resistance_data->timeout_over &&
timeout_length_ms != 0)
@@ -533,29 +539,28 @@ apply_edge_snapping (int old_pos,
* a proposed new position (ignoring edge resistance/snapping), and then
* applies edge resistance to EACH edge (separately) updating new_outer.
* It returns true if new_outer is modified, false otherwise.
*
* display->grab_edge_resistance_data MUST already be setup or calling this
* function will cause a crash.
*/
static gboolean
apply_edge_resistance_to_each_side (MetaDisplay *display,
MetaWindow *window,
const MetaRectangle *old_outer,
MetaRectangle *new_outer,
GSourceFunc timeout_func,
gboolean auto_snap,
gboolean keyboard_op,
gboolean is_resize)
apply_edge_resistance_to_each_side (MetaDisplay *display,
MetaWindow *window,
MetaDevice *device,
const MetaRectangle *old_outer,
MetaRectangle *new_outer,
MetaEdgeResistanceFunc timeout_func,
gboolean auto_snap,
gboolean keyboard_op,
gboolean is_resize)
{
MetaEdgeResistanceData *edge_data;
MetaRectangle modified_rect;
gboolean modified;
int new_left, new_right, new_top, new_bottom;
if (display->grab_edge_resistance_data == NULL)
compute_resistance_and_snapping_edges (display);
edge_data = g_hash_table_lookup (display->edge_resistance_info,
window->screen);
edge_data = display->grab_edge_resistance_data;
if (!edge_data)
edge_data = compute_resistance_and_snapping_edges (display, window->screen);
if (auto_snap)
{
@@ -601,7 +606,7 @@ apply_edge_resistance_to_each_side (MetaDisplay *display,
if (!is_resize || window->size_hints.width_inc == 1)
{
/* Now, apply the normal horizontal edge resistance */
new_left = apply_edge_resistance (window,
new_left = apply_edge_resistance (window, device,
BOX_LEFT (*old_outer),
BOX_LEFT (*new_outer),
old_outer,
@@ -611,7 +616,7 @@ apply_edge_resistance_to_each_side (MetaDisplay *display,
timeout_func,
TRUE,
keyboard_op);
new_right = apply_edge_resistance (window,
new_right = apply_edge_resistance (window, device,
BOX_RIGHT (*old_outer),
BOX_RIGHT (*new_outer),
old_outer,
@@ -630,7 +635,7 @@ apply_edge_resistance_to_each_side (MetaDisplay *display,
/* Same for vertical resizes... */
if (!is_resize || window->size_hints.height_inc == 1)
{
new_top = apply_edge_resistance (window,
new_top = apply_edge_resistance (window, device,
BOX_TOP (*old_outer),
BOX_TOP (*new_outer),
old_outer,
@@ -640,7 +645,7 @@ apply_edge_resistance_to_each_side (MetaDisplay *display,
timeout_func,
FALSE,
keyboard_op);
new_bottom = apply_edge_resistance (window,
new_bottom = apply_edge_resistance (window, device,
BOX_BOTTOM (*old_outer),
BOX_BOTTOM (*new_outer),
old_outer,
@@ -669,15 +674,20 @@ apply_edge_resistance_to_each_side (MetaDisplay *display,
}
void
meta_display_cleanup_edges (MetaDisplay *display)
meta_display_cleanup_edges (MetaDisplay *display,
MetaScreen *screen)
{
guint i,j;
MetaEdgeResistanceData *edge_data = display->grab_edge_resistance_data;
MetaEdgeResistanceData *edge_data;
GHashTable *edges_to_be_freed;
edge_data = g_hash_table_lookup (display->edge_resistance_info, screen);
if (edge_data == NULL) /* Not currently cached */
return;
g_hash_table_steal (display->edge_resistance_info, screen);
/* We first need to clean out any window edges */
edges_to_be_freed = g_hash_table_new_full (g_direct_hash, g_direct_equal,
g_free, NULL);
@@ -750,8 +760,7 @@ meta_display_cleanup_edges (MetaDisplay *display)
edge_data->bottom_data.timeout_id != 0)
g_source_remove (edge_data->bottom_data.timeout_id);
g_free (display->grab_edge_resistance_data);
display->grab_edge_resistance_data = NULL;
g_free (edge_data);
}
static int
@@ -763,8 +772,9 @@ stupid_sort_requiring_extra_pointer_dereference (gconstpointer a,
return meta_rectangle_edge_cmp_ignore_type (*a_edge, *b_edge);
}
static void
static MetaEdgeResistanceData *
cache_edges (MetaDisplay *display,
MetaScreen *screen,
GList *window_edges,
GList *monitor_edges,
GList *screen_edges)
@@ -848,9 +858,8 @@ cache_edges (MetaDisplay *display,
/*
* 2nd: Allocate the edges
*/
g_assert (display->grab_edge_resistance_data == NULL);
display->grab_edge_resistance_data = g_new0 (MetaEdgeResistanceData, 1);
edge_data = display->grab_edge_resistance_data;
edge_data = g_new0 (MetaEdgeResistanceData, 1);
edge_data->left_edges = g_array_sized_new (FALSE,
FALSE,
sizeof(MetaEdge*),
@@ -917,21 +926,21 @@ cache_edges (MetaDisplay *display,
* avoided this sort by sticking them into the array with some simple
* merging of the lists).
*/
g_array_sort (display->grab_edge_resistance_data->left_edges,
g_array_sort (edge_data->left_edges,
stupid_sort_requiring_extra_pointer_dereference);
g_array_sort (display->grab_edge_resistance_data->right_edges,
g_array_sort (edge_data->right_edges,
stupid_sort_requiring_extra_pointer_dereference);
g_array_sort (display->grab_edge_resistance_data->top_edges,
g_array_sort (edge_data->top_edges,
stupid_sort_requiring_extra_pointer_dereference);
g_array_sort (display->grab_edge_resistance_data->bottom_edges,
g_array_sort (edge_data->bottom_edges,
stupid_sort_requiring_extra_pointer_dereference);
return edge_data;
}
static void
initialize_grab_edge_resistance_data (MetaDisplay *display)
initialize_grab_edge_resistance_data (MetaEdgeResistanceData *edge_data)
{
MetaEdgeResistanceData *edge_data = display->grab_edge_resistance_data;
edge_data->left_data.timeout_setup = FALSE;
edge_data->right_data.timeout_setup = FALSE;
edge_data->top_data.timeout_setup = FALSE;
@@ -943,8 +952,9 @@ initialize_grab_edge_resistance_data (MetaDisplay *display)
edge_data->bottom_data.keyboard_buildup = 0;
}
static void
compute_resistance_and_snapping_edges (MetaDisplay *display)
static MetaEdgeResistanceData *
compute_resistance_and_snapping_edges (MetaDisplay *display,
MetaScreen *screen)
{
GList *stacked_windows;
GList *cur_window_iter;
@@ -956,18 +966,17 @@ compute_resistance_and_snapping_edges (MetaDisplay *display)
* in the layer that we are working on
*/
GSList *rem_windows, *rem_win_stacking;
MetaEdgeResistanceData *edge_data;
g_assert (display->grab_window != NULL);
meta_topic (META_DEBUG_WINDOW_OPS,
"Computing edges to resist-movement or snap-to for %s.\n",
display->grab_window->desc);
"Computing edges to resist-movement or snap-to for screen %s.\n",
screen->screen_name);
/*
* 1st: Get the list of relevant windows, from bottom to top
*/
stacked_windows =
meta_stack_list_windows (display->grab_screen->stack,
display->grab_screen->active_workspace);
meta_stack_list_windows (screen->stack, screen->active_workspace);
/*
* 2nd: we need to separate that stacked list into a list of windows that
@@ -981,7 +990,7 @@ compute_resistance_and_snapping_edges (MetaDisplay *display)
while (cur_window_iter != NULL)
{
MetaWindow *cur_window = cur_window_iter->data;
if (WINDOW_EDGES_RELEVANT (cur_window, display))
if (WINDOW_EDGES_RELEVANT (cur_window, display, screen))
{
MetaRectangle *new_rect;
new_rect = g_new (MetaRectangle, 1);
@@ -1016,7 +1025,7 @@ compute_resistance_and_snapping_edges (MetaDisplay *display)
* resistance (note that dock edges are considered screen edges
* which are handled separately
*/
if (WINDOW_EDGES_RELEVANT (cur_window, display) &&
if (WINDOW_EDGES_RELEVANT (cur_window, display, screen) &&
cur_window->type != META_WINDOW_DOCK)
{
GList *new_edges;
@@ -1028,7 +1037,7 @@ compute_resistance_and_snapping_edges (MetaDisplay *display)
* by other windows or DOCKS, but that's handled below).
*/
meta_rectangle_intersect (&cur_rect,
&display->grab_screen->rect,
&screen->rect,
&reduced);
new_edges = NULL;
@@ -1123,32 +1132,36 @@ compute_resistance_and_snapping_edges (MetaDisplay *display)
* monitor edges in an array for quick access. Free the edges since
* they've been cached elsewhere.
*/
cache_edges (display,
edges,
display->grab_screen->active_workspace->monitor_edges,
display->grab_screen->active_workspace->screen_edges);
edge_data = cache_edges (display, screen,
edges,
screen->active_workspace->monitor_edges,
screen->active_workspace->screen_edges);
g_list_free (edges);
/*
* 6th: Initialize the resistance timeouts and buildups
*/
initialize_grab_edge_resistance_data (display);
initialize_grab_edge_resistance_data (edge_data);
return edge_data;
}
/* Note that old_[xy] and new_[xy] are with respect to inner positions of
* the window.
*/
void
meta_window_edge_resistance_for_move (MetaWindow *window,
int old_x,
int old_y,
int *new_x,
int *new_y,
GSourceFunc timeout_func,
gboolean snap,
gboolean is_keyboard_op)
meta_window_edge_resistance_for_move (MetaWindow *window,
MetaDevice *device,
int old_x,
int old_y,
int *new_x,
int *new_y,
MetaEdgeResistanceFunc timeout_func,
gboolean snap,
gboolean is_keyboard_op)
{
MetaRectangle old_outer, proposed_outer, new_outer;
MetaGrabInfo *grab_info;
gboolean is_resize;
meta_window_get_outer_rect (window, &old_outer);
@@ -1158,10 +1171,14 @@ meta_window_edge_resistance_for_move (MetaWindow *window,
proposed_outer.y += (*new_y - old_y);
new_outer = proposed_outer;
window->display->grab_last_user_action_was_snap = snap;
grab_info = meta_display_get_grab_info (window->display, device);
g_assert (grab_info != NULL);
grab_info->grab_last_user_action_was_snap = snap;
is_resize = FALSE;
if (apply_edge_resistance_to_each_side (window->display,
window,
device,
&old_outer,
&new_outer,
timeout_func,
@@ -1223,18 +1240,20 @@ meta_window_edge_resistance_for_move (MetaWindow *window,
* sizes of the inner window.
*/
void
meta_window_edge_resistance_for_resize (MetaWindow *window,
int old_width,
int old_height,
int *new_width,
int *new_height,
int gravity,
GSourceFunc timeout_func,
gboolean snap,
gboolean is_keyboard_op)
meta_window_edge_resistance_for_resize (MetaWindow *window,
MetaDevice *device,
int old_width,
int old_height,
int *new_width,
int *new_height,
int gravity,
MetaEdgeResistanceFunc timeout_func,
gboolean snap,
gboolean is_keyboard_op)
{
MetaRectangle old_outer, new_outer;
int proposed_outer_width, proposed_outer_height;
MetaGrabInfo *grab_info;
gboolean is_resize;
meta_window_get_outer_rect (window, &old_outer);
@@ -1246,10 +1265,14 @@ meta_window_edge_resistance_for_resize (MetaWindow *window,
proposed_outer_width,
proposed_outer_height);
window->display->grab_last_user_action_was_snap = snap;
grab_info = meta_display_get_grab_info (window->display, device);
g_assert (grab_info != NULL);
grab_info->grab_last_user_action_was_snap = snap;
is_resize = TRUE;
if (apply_edge_resistance_to_each_side (window->display,
window,
device,
&old_outer,
&new_outer,
timeout_func,

View File

@@ -26,23 +26,28 @@
#include "window-private.h"
void meta_window_edge_resistance_for_move (MetaWindow *window,
int old_x,
int old_y,
int *new_x,
int *new_y,
GSourceFunc timeout_func,
gboolean snap,
gboolean is_keyboard_op);
void meta_window_edge_resistance_for_resize (MetaWindow *window,
int old_width,
int old_height,
int *new_width,
int *new_height,
int gravity,
GSourceFunc timeout_func,
gboolean snap,
gboolean is_keyboard_op);
typedef gboolean (* MetaEdgeResistanceFunc) (MetaWindow *window,
MetaDevice *device);
void meta_window_edge_resistance_for_move (MetaWindow *window,
MetaDevice *device,
int old_x,
int old_y,
int *new_x,
int *new_y,
MetaEdgeResistanceFunc func,
gboolean snap,
gboolean is_keyboard_op);
void meta_window_edge_resistance_for_resize (MetaWindow *window,
MetaDevice *device,
int old_width,
int old_height,
int *new_width,
int *new_height,
int gravity,
MetaEdgeResistanceFunc func,
gboolean snap,
gboolean is_keyboard_op);
#endif /* META_EDGE_RESISTANCE_H */

View File

@@ -28,6 +28,7 @@
#include "bell.h"
#include <meta/errors.h>
#include "keybindings-private.h"
#include "device-pointer.h"
#include <X11/extensions/Xrender.h>
@@ -64,7 +65,7 @@ meta_window_ensure_frame (MetaWindow *window)
frame->child_y = 0;
frame->bottom_height = 0;
frame->right_width = 0;
frame->current_cursor = 0;
frame->cursors = g_hash_table_new (NULL, NULL);
frame->mapped = FALSE;
frame->is_flashing = FALSE;
@@ -228,9 +229,10 @@ meta_window_destroy_frame (MetaWindow *window)
/* Move keybindings to window instead of frame */
meta_window_grab_keys (window);
g_hash_table_destroy (frame->cursors);
g_free (frame);
/* Put our state back where it should be */
meta_window_queue (window, META_QUEUE_CALC_SHOWING);
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
@@ -244,6 +246,12 @@ meta_frame_get_flags (MetaFrame *frame)
flags = 0;
/* Disallow frame operations
* while the popup menu is open.
*/
if (frame->window->menu)
return flags;
if (frame->window->border_only)
{
; /* FIXME this may disable the _function_ as well as decor
@@ -382,8 +390,7 @@ meta_frame_sync_to_window (MetaFrame *frame,
/* If we're interactively resizing the frame, repaint
* it immediately so we don't start to lag.
*/
if (frame->window->display->grab_window ==
frame->window)
if (frame->window->cur_grab != NULL)
meta_ui_repaint_frame (frame->window->screen->ui,
frame->xwindow);
}
@@ -408,22 +415,22 @@ meta_frame_queue_draw (MetaFrame *frame)
}
void
meta_frame_set_screen_cursor (MetaFrame *frame,
MetaCursor cursor)
meta_frame_set_screen_cursor (MetaFrame *frame,
MetaDevice *pointer,
MetaCursor cursor)
{
Cursor xcursor;
if (cursor == frame->current_cursor)
MetaCursor old_cursor;
old_cursor = GPOINTER_TO_UINT (g_hash_table_lookup (frame->cursors, pointer));
if (cursor == old_cursor)
return;
frame->current_cursor = cursor;
if (cursor == META_CURSOR_DEFAULT)
XUndefineCursor (frame->window->display->xdisplay, frame->xwindow);
else
{
xcursor = meta_display_create_x_cursor (frame->window->display, cursor);
XDefineCursor (frame->window->display->xdisplay, frame->xwindow, xcursor);
XFlush (frame->window->display->xdisplay);
XFreeCursor (frame->window->display->xdisplay, xcursor);
}
g_hash_table_insert (frame->cursors, pointer,
GUINT_TO_POINTER (cursor));
meta_device_pointer_set_window_cursor (META_DEVICE_POINTER (pointer),
frame->xwindow, cursor);
XFlush (frame->window->display->xdisplay);
}
Window

View File

@@ -34,7 +34,7 @@ struct _MetaFrame
/* reparent window */
Window xwindow;
MetaCursor current_cursor;
GHashTable *cursors;
/* This rect is trusted info from where we put the
* frame, not the result of ConfigureNotify
@@ -76,7 +76,8 @@ gboolean meta_frame_sync_to_window (MetaFrame *frame,
cairo_region_t *meta_frame_get_frame_bounds (MetaFrame *frame);
void meta_frame_set_screen_cursor (MetaFrame *frame,
void meta_frame_set_screen_cursor (MetaFrame *frame,
MetaDevice *pointer,
MetaCursor cursor);
#endif

677
src/core/input-events.c Normal file
View File

@@ -0,0 +1,677 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/* XEvent utility methods */
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>
#include "input-events.h"
#include "devices-core.h"
#include "device-map-private.h"
#include <X11/Xlib.h>
#ifdef HAVE_XINPUT2
#include <X11/extensions/XInput2.h>
#endif
/* Quite a hack: normalizes XI2 events to their
* core event equivalent, so most code is shared
* for both implementations, code handling input
* events should use the helper functions so
* the actual event is treated correctly.
*/
gboolean
meta_input_event_get_type (MetaDisplay *display,
XEvent *ev,
guint *ev_type)
{
guint type = 0; /* Silence gcc */
gboolean retval = TRUE;
#ifdef HAVE_XINPUT2
if (display->have_xinput2 &&
ev->type == GenericEvent &&
ev->xcookie.extension == display->xinput2_opcode)
{
XIEvent *xev;
/* NB: GDK event filters already have generic events
* allocated, so no need to do XGetEventData() on our own
*/
xev = (XIEvent *) ev->xcookie.data;
switch (xev->evtype)
{
case XI_Motion:
type = MotionNotify;
break;
case XI_ButtonPress:
type = ButtonPress;
break;
case XI_ButtonRelease:
type = ButtonRelease;
break;
case XI_KeyPress:
type = KeyPress;
break;
case XI_KeyRelease:
type = KeyRelease;
break;
case XI_FocusIn:
type = FocusIn;
break;
case XI_FocusOut:
type = FocusOut;
break;
case XI_Enter:
type = EnterNotify;
break;
case XI_Leave:
type = LeaveNotify;
break;
default:
retval = FALSE;
break;
}
}
else
#endif /* HAVE_XINPUT2 */
{
switch (ev->type)
{
case MotionNotify:
case ButtonPress:
case ButtonRelease:
case KeyPress:
case KeyRelease:
case FocusIn:
case FocusOut:
case EnterNotify:
case LeaveNotify:
type = ev->type;
break;
default:
retval = FALSE;
break;
}
}
if (retval)
{
if (ev_type)
*ev_type = type;
return TRUE;
}
else
return FALSE;
}
gboolean
meta_input_event_is_type (MetaDisplay *display,
XEvent *ev,
guint ev_type)
{
guint type;
if (!meta_input_event_get_type (display, ev, &type))
return FALSE;
return (type == ev_type);
}
Window
meta_input_event_get_window (MetaDisplay *display,
XEvent *ev)
{
#ifdef HAVE_XINPUT2
if (ev->type == GenericEvent &&
ev->xcookie.extension == display->xinput2_opcode)
{
XIEvent *xev;
g_assert (display->have_xinput2 == TRUE);
/* GDK event filters already have generic events allocated */
xev = (XIEvent *) ev->xcookie.data;
switch (xev->evtype)
{
case XI_Motion:
case XI_ButtonPress:
case XI_ButtonRelease:
case XI_KeyPress:
case XI_KeyRelease:
return ((XIDeviceEvent *) xev)->event;
case XI_FocusIn:
case XI_FocusOut:
case XI_Enter:
case XI_Leave:
return ((XIEnterEvent *) xev)->event;
default:
return None;
}
}
else
#endif /* HAVE_XINPUT2 */
return ev->xany.window;
}
Window
meta_input_event_get_root_window (MetaDisplay *display,
XEvent *ev)
{
#ifdef HAVE_XINPUT2
if (ev->type == GenericEvent &&
ev->xcookie.extension == display->xinput2_opcode)
{
XIEvent *xev;
g_assert (display->have_xinput2 == TRUE);
xev = (XIEvent *) ev->xcookie.data;
switch (xev->evtype)
{
case XI_Motion:
case XI_ButtonPress:
case XI_ButtonRelease:
case XI_KeyPress:
case XI_KeyRelease:
return ((XIDeviceEvent *) xev)->root;
case XI_FocusIn:
case XI_FocusOut:
case XI_Enter:
case XI_Leave:
return ((XIEnterEvent *) xev)->root;
default:
break;
}
}
else
#endif /* HAVE_XINPUT2 */
{
switch (ev->type)
{
case KeyPress:
case KeyRelease:
return ev->xkey.root;
case ButtonPress:
case ButtonRelease:
return ev->xbutton.root;
case EnterNotify:
case LeaveNotify:
return ev->xcrossing.root;
case MotionNotify:
return ev->xbutton.root;
default:
break;
}
}
return None;
}
Time
meta_input_event_get_time (MetaDisplay *display,
XEvent *ev)
{
#ifdef HAVE_XINPUT2
if (ev->type == GenericEvent &&
ev->xcookie.extension == display->xinput2_opcode)
{
XIEvent *xev;
g_assert (display->have_xinput2 == TRUE);
xev = (XIEvent *) ev->xcookie.data;
switch (xev->evtype)
{
case XI_Motion:
case XI_ButtonPress:
case XI_ButtonRelease:
case XI_KeyPress:
case XI_KeyRelease:
return ((XIDeviceEvent *) xev)->time;
case XI_FocusIn:
case XI_FocusOut:
case XI_Enter:
case XI_Leave:
return ((XIEnterEvent *) xev)->time;
default:
break;
}
}
else
#endif /* HAVE_XINPUT2 */
{
switch (ev->type)
{
case KeyPress:
case KeyRelease:
return ev->xkey.time;
case ButtonPress:
case ButtonRelease:
return ev->xbutton.time;
case EnterNotify:
case LeaveNotify:
return ev->xcrossing.time;
case MotionNotify:
return ev->xmotion.time;
default:
break;
}
}
return CurrentTime;
}
gboolean
meta_input_event_get_coordinates (MetaDisplay *display,
XEvent *ev,
gdouble *x_ret,
gdouble *y_ret,
gdouble *x_root_ret,
gdouble *y_root_ret)
{
gdouble x, y, x_root, y_root;
gboolean retval = TRUE;
#ifdef HAVE_XINPUT2
if (ev->type == GenericEvent &&
ev->xcookie.extension == display->xinput2_opcode)
{
XIEvent *xev;
g_assert (display->have_xinput2 == TRUE);
xev = (XIEvent *) ev->xcookie.data;
switch (xev->evtype)
{
case XI_Motion:
case XI_ButtonPress:
case XI_ButtonRelease:
case XI_KeyPress:
case XI_KeyRelease:
{
XIDeviceEvent *event = (XIDeviceEvent *) xev;
x = event->event_x;
y = event->event_y;
x_root = event->root_x;
y_root = event->root_y;
}
break;
case XI_FocusIn:
case XI_FocusOut:
case XI_Enter:
case XI_Leave:
{
XIEnterEvent *event = (XIEnterEvent *) xev;
x = event->event_x;
y = event->event_y;
x_root = event->root_x;
y_root = event->root_y;
}
break;
default:
retval = FALSE;
break;
}
}
else
#endif /* HAVE_XINPUT2 */
{
switch (ev->type)
{
case KeyPress:
case KeyRelease:
x = ev->xkey.x;
y = ev->xkey.y;
x_root = ev->xkey.x_root;
y_root = ev->xkey.y_root;
break;
case ButtonPress:
case ButtonRelease:
x = ev->xbutton.x;
y = ev->xbutton.y;
x_root = ev->xbutton.x_root;
y_root = ev->xbutton.y_root;
break;
case EnterNotify:
case LeaveNotify:
x = ev->xcrossing.x;
y = ev->xcrossing.y;
x_root = ev->xcrossing.x_root;
y_root = ev->xcrossing.y_root;
break;
case MotionNotify:
x = ev->xmotion.x;
y = ev->xmotion.y;
x_root = ev->xmotion.x_root;
y_root = ev->xmotion.y_root;
break;
default:
retval = FALSE;
break;
}
}
if (retval)
{
if (x_ret)
*x_ret = x;
if (y_ret)
*y_ret = y;
if (x_root_ret)
*x_root_ret = x_root;
if (y_root_ret)
*y_root_ret = y_root;
}
return retval;
}
gboolean
meta_input_event_get_state (MetaDisplay *display,
XEvent *ev,
guint *state)
{
gboolean retval = TRUE;
guint s;
#ifdef HAVE_XINPUT2
if (ev->type == GenericEvent &&
ev->xcookie.extension == display->xinput2_opcode)
{
XIEvent *xev;
g_assert (display->have_xinput2 == TRUE);
xev = (XIEvent *) ev->xcookie.data;
switch (xev->evtype)
{
case XI_Motion:
case XI_ButtonPress:
case XI_ButtonRelease:
case XI_KeyPress:
case XI_KeyRelease:
s = ((XIDeviceEvent *) xev)->mods.effective;
break;
case XI_FocusIn:
case XI_FocusOut:
case XI_Enter:
case XI_Leave:
s = ((XIDeviceEvent *) xev)->mods.effective;
break;
default:
retval = FALSE;
break;
}
}
else
#endif /* HAVE_XINPUT2 */
{
switch (ev->type)
{
case KeyPress:
case KeyRelease:
s = ev->xkey.state;
break;
case ButtonPress:
case ButtonRelease:
s = ev->xbutton.state;
break;
case EnterNotify:
case LeaveNotify:
s = ev->xcrossing.state;
break;
case MotionNotify:
s = ev->xmotion.state;
break;
default:
retval = FALSE;
break;
}
}
if (retval && state)
*state = s;
return retval;
}
gboolean
meta_input_event_get_keycode (MetaDisplay *display,
XEvent *ev,
guint *keycode)
{
#ifdef HAVE_XINPUT2
if (ev->type == GenericEvent &&
ev->xcookie.extension == display->xinput2_opcode)
{
XIEvent *xev;
g_assert (display->have_xinput2 == TRUE);
xev = (XIEvent *) ev->xcookie.data;
if (xev->evtype == XI_KeyPress ||
xev->evtype == XI_KeyRelease)
{
if (keycode)
{
/* The detail field contains keycode for key events */
*keycode = ((XIDeviceEvent *) xev)->detail;
}
return TRUE;
}
}
else
#endif /* HAVE_XINPUT2 */
{
if (ev->type == KeyPress ||
ev->type == KeyRelease)
{
if (keycode)
*keycode = ev->xkey.keycode;
return TRUE;
}
}
return FALSE;
}
gboolean
meta_input_event_get_button (MetaDisplay *display,
XEvent *ev,
guint *button)
{
#ifdef HAVE_XINPUT2
if (ev->type == GenericEvent &&
ev->xcookie.extension == display->xinput2_opcode)
{
XIEvent *xev;
g_assert (display->have_xinput2 == TRUE);
xev = (XIEvent *) ev->xcookie.data;
if (xev->evtype == XI_ButtonPress ||
xev->evtype == XI_ButtonRelease)
{
if (button)
{
/* The detail field contains
* button number for button events
*/
*button = ((XIDeviceEvent *) xev)->detail;
}
return TRUE;
}
}
else
#endif /* HAVE_XINPUT2 */
{
if (ev->type == ButtonPress ||
ev->type == ButtonRelease)
{
if (button)
*button = ev->xbutton.button;
return TRUE;
}
}
return FALSE;
}
/* NB: Also works for focus in/out events */
gboolean
meta_input_event_get_crossing_details (MetaDisplay *display,
XEvent *ev,
guint *mode_out,
guint *detail_out)
{
gboolean retval = TRUE;
guint mode, detail;
#ifdef HAVE_XINPUT2
if (ev->type == GenericEvent &&
ev->xcookie.extension == display->xinput2_opcode)
{
XIEvent *xev;
g_assert (display->have_xinput2 == TRUE);
xev = (XIEvent *) ev->xcookie.data;
if (xev->evtype == XI_Enter ||
xev->evtype == XI_Leave ||
xev->evtype == XI_FocusIn ||
xev->evtype == XI_FocusOut)
{
mode = ((XIEnterEvent *) xev)->mode;
detail = ((XIEnterEvent *) xev)->detail;
}
else
retval = FALSE;
}
else
#endif /* HAVE_XINPUT2 */
{
if (ev->type == EnterNotify ||
ev->type == LeaveNotify)
{
mode = ev->xcrossing.mode;
detail = ev->xcrossing.detail;
}
else if (ev->type == FocusIn ||
ev->type == FocusOut)
{
mode = ev->xfocus.mode;
detail = ev->xfocus.detail;
}
else
retval = FALSE;
}
if (retval)
{
if (mode_out)
*mode_out = mode;
if (detail_out)
*detail_out = detail;
}
return retval;
}
MetaDevice *
meta_input_event_get_device (MetaDisplay *display,
XEvent *ev)
{
guint evtype;
if (!meta_input_event_get_type (display, ev, &evtype))
return NULL;
#ifdef HAVE_XINPUT2
if (ev->type == GenericEvent &&
ev->xcookie.extension == display->xinput2_opcode)
{
XIEvent *xev;
g_assert (display->have_xinput2 == TRUE);
xev = (XIEvent *) ev->xcookie.data;
switch (evtype)
{
case XI_Motion:
case XI_ButtonPress:
case XI_ButtonRelease:
case XI_KeyPress:
case XI_KeyRelease:
return meta_device_map_lookup (display->device_map,
((XIDeviceEvent *) xev)->deviceid);
case XI_FocusIn:
case XI_FocusOut:
case XI_Enter:
case XI_Leave:
return meta_device_map_lookup (display->device_map,
((XIEnterEvent *) xev)->deviceid);
default:
break;
}
}
else
#endif
{
switch (ev->type)
{
case KeyPress:
case KeyRelease:
case FocusIn:
case FocusOut:
return meta_device_map_lookup (display->device_map,
META_CORE_KEYBOARD_ID);
default:
/* All other events are pointers' */
return meta_device_map_lookup (display->device_map,
META_CORE_POINTER_ID);
}
}
return NULL;
}

78
src/core/input-events.h Normal file
View File

@@ -0,0 +1,78 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/**
* \file event.h Utility functions for handling events
*
* Handling events.
* This file contains helper methods to handle events, specially
* input events, which can be either core or XInput2.
*/
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_EVENT_H
#define META_EVENT_H
#include <config.h>
#include <X11/Xlib.h>
#include "display-private.h"
#include <meta/device-map.h>
gboolean meta_input_event_get_type (MetaDisplay *display,
XEvent *ev,
guint *ev_type);
gboolean meta_input_event_is_type (MetaDisplay *display,
XEvent *ev,
guint ev_type);
Window meta_input_event_get_window (MetaDisplay *display,
XEvent *ev);
Window meta_input_event_get_root_window (MetaDisplay *display,
XEvent *ev);
Time meta_input_event_get_time (MetaDisplay *display,
XEvent *ev);
gboolean meta_input_event_get_coordinates (MetaDisplay *display,
XEvent *ev,
gdouble *x_ret,
gdouble *y_ret,
gdouble *x_root_ret,
gdouble *y_root_ret);
gboolean meta_input_event_get_state (MetaDisplay *display,
XEvent *ev,
guint *state);
gboolean meta_input_event_get_keycode (MetaDisplay *display,
XEvent *ev,
guint *keycode);
gboolean meta_input_event_get_button (MetaDisplay *display,
XEvent *event,
guint *button);
gboolean meta_input_event_get_crossing_details (MetaDisplay *display,
XEvent *ev,
guint *mode_out,
guint *detail_out);
MetaDevice *meta_input_event_get_device (MetaDisplay *display,
XEvent *ev);
#endif /* META_EVENT_H */

View File

@@ -57,14 +57,18 @@ void meta_display_shutdown_keys (MetaDisplay *display);
void meta_screen_grab_keys (MetaScreen *screen);
void meta_screen_ungrab_keys (MetaScreen *screen);
gboolean meta_screen_grab_all_keys (MetaScreen *screen,
MetaDevice *device,
guint32 timestamp);
void meta_screen_ungrab_all_keys (MetaScreen *screen,
void meta_screen_ungrab_all_keys (MetaScreen *screen,
MetaDevice *device,
guint32 timestamp);
void meta_window_grab_keys (MetaWindow *window);
void meta_window_ungrab_keys (MetaWindow *window);
gboolean meta_window_grab_all_keys (MetaWindow *window,
MetaDevice *device,
guint32 timestamp);
void meta_window_ungrab_all_keys (MetaWindow *window,
MetaDevice *device,
guint32 timestamp);
gboolean meta_display_process_key_event (MetaDisplay *display,
MetaWindow *window,

File diff suppressed because it is too large Load Diff

View File

@@ -301,9 +301,12 @@ static GSourceFuncs event_funcs = {
static void
meta_clutter_init (void)
{
if (!meta_get_use_core_devices ())
clutter_x11_enable_xinput ();
clutter_x11_set_display (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
clutter_x11_disable_event_retrieval ();
if (CLUTTER_INIT_SUCCESS == clutter_init (NULL, NULL))
{
GSource *source = g_source_new (&event_funcs, sizeof (GSource));
@@ -414,6 +417,8 @@ meta_init (void)
meta_set_verbose (TRUE);
if (g_getenv ("MUTTER_DEBUG"))
meta_set_debugging (TRUE);
if (g_getenv ("MUTTER_USE_CORE_DEVICES"))
meta_set_use_core_devices (TRUE);
if (g_get_home_dir ())
if (chdir (g_get_home_dir ()) < 0)

View File

@@ -69,8 +69,6 @@ main (int argc, char **argv)
GOptionContext *ctx;
GError *error = NULL;
g_type_init ();
ctx = meta_get_option_context ();
g_option_context_add_main_entries (ctx, mutter_options, GETTEXT_PACKAGE);
if (!g_option_context_parse (ctx, &argc, &argv, &error))

View File

@@ -90,6 +90,7 @@ northwestcmp (gconstpointer a, gconstpointer b)
static void
find_next_cascade (MetaWindow *window,
MetaDevice *pointer,
MetaFrameBorders *borders,
/* visible windows on relevant workspaces */
GList *windows,
@@ -136,7 +137,7 @@ find_next_cascade (MetaWindow *window,
* of NW corner of window frame.
*/
current = meta_screen_get_current_monitor (window->screen);
current = meta_screen_get_current_monitor (window->screen, pointer);
meta_window_get_work_area_for_monitor (window, current, &work_area);
cascade_x = MAX (0, work_area.x);
@@ -354,10 +355,17 @@ avoid_being_obscured_as_second_modal_dialog (MetaWindow *window,
* know about the modal-to-the-main-window part.
*/
MetaWindow *focus_window;
MetaWindow *focus_window = NULL;
MetaFocusInfo *focus_info;
MetaRectangle overlap;
MetaDevice *pointer, *keyboard;
focus_window = window->display->focus_window;
pointer = meta_window_guess_grab_pointer (window);
keyboard = meta_device_get_paired_device (pointer);
focus_info = meta_display_get_focus_info (window->display, keyboard);
if (focus_window)
focus_window = focus_info->focus_window;
if (window->denied_focus_and_not_transient &&
window->wm_state_modal && /* FIXME: Maybe do this for all transients? */
@@ -660,6 +668,7 @@ meta_window_place (MetaWindow *window,
{
GList *windows;
const MetaMonitorInfo *xi;
MetaDevice *pointer, *keyboard;
/* frame member variables should NEVER be used in here, only
* MetaFrameBorders. But remember borders == NULL
@@ -671,7 +680,9 @@ meta_window_place (MetaWindow *window,
meta_topic (META_DEBUG_PLACEMENT, "Placing window %s\n", window->desc);
windows = NULL;
pointer = meta_window_guess_grab_pointer (window);
keyboard = meta_device_get_paired_device (pointer);
switch (window->type)
{
/* Run placement algorithm on these. */
@@ -815,7 +826,7 @@ meta_window_place (MetaWindow *window,
int w, h;
/* Warning, this function is a round trip! */
xi = meta_screen_get_current_monitor_info (window->screen);
xi = meta_screen_get_current_monitor_info (window->screen, pointer);
w = xi->rect.width;
h = xi->rect.height;
@@ -860,8 +871,8 @@ meta_window_place (MetaWindow *window,
}
/* Warning, this is a round trip! */
xi = meta_screen_get_current_monitor_info (window->screen);
xi = meta_screen_get_current_monitor_info (window->screen, pointer);
/* "Origin" placement algorithm */
x = xi->rect.x;
y = xi->rect.y;
@@ -899,8 +910,8 @@ meta_window_place (MetaWindow *window,
/* If no placement has been done, revert to cascade to avoid
* fully overlapping window (e.g. starting multiple terminals)
* */
if (x == xi->rect.x && y == xi->rect.y)
find_next_cascade (window, borders, windows, x, y, &x, &y);
if (x == xi->rect.x && y == xi->rect.y)
find_next_cascade (window, pointer, borders, windows, x, y, &x, &y);
done_check_denied_focus:
/* If the window is being denied focus and isn't a transient of the
@@ -913,8 +924,12 @@ meta_window_place (MetaWindow *window,
gboolean found_fit;
MetaWindow *focus_window;
MetaRectangle overlap;
MetaFocusInfo *focus_info;
focus_window = window->display->focus_window;
focus_info = meta_display_get_focus_info (window->display, keyboard);
g_assert (focus_info != NULL);
focus_window = focus_info->focus_window;
g_assert (focus_window != NULL);
/* No need to do anything if the window doesn't overlap at all */

View File

@@ -87,6 +87,7 @@ static gboolean application_based = FALSE;
static gboolean disable_workarounds = FALSE;
static gboolean auto_raise = FALSE;
static gboolean auto_raise_delay = 500;
static gboolean focus_change_on_pointer_rest = FALSE;
static gboolean bell_is_visible = FALSE;
static gboolean bell_is_audible = TRUE;
static gboolean gnome_accessibility = FALSE;
@@ -304,6 +305,13 @@ static MetaBoolPreference preferences_bool[] =
},
&auto_raise,
},
{
{ "focus-change-on-pointer-rest",
SCHEMA_MUTTER,
META_PREF_FOCUS_CHANGE_ON_POINTER_REST,
},
&focus_change_on_pointer_rest
},
{
{ "visual-bell",
SCHEMA_GENERAL,
@@ -1608,6 +1616,9 @@ meta_preference_to_string (MetaPreference pref)
case META_PREF_AUTO_RAISE_DELAY:
return "AUTO_RAISE_DELAY";
case META_PREF_FOCUS_CHANGE_ON_POINTER_REST:
return "FOCUS_CHANGE_ON_POINTER_REST";
case META_PREF_BUTTON_LAYOUT:
return "BUTTON_LAYOUT";
@@ -2046,6 +2057,12 @@ meta_prefs_get_auto_raise_delay (void)
return auto_raise_delay;
}
gboolean
meta_prefs_get_focus_change_on_pointer_rest ()
{
return focus_change_on_pointer_rest;
}
gboolean
meta_prefs_get_gnome_accessibility ()
{

View File

@@ -92,7 +92,8 @@ struct _MetaScreen
MetaStack *stack;
MetaStackTracker *stack_tracker;
MetaCursor current_cursor;
/* per-pointer cursors */
GHashTable *cursors;
Window flash_window;
@@ -158,8 +159,10 @@ void meta_screen_foreach_window (MetaScreen *scree
gpointer data);
void meta_screen_set_cursor (MetaScreen *screen,
MetaDevice *pointer,
MetaCursor cursor);
void meta_screen_update_cursor (MetaScreen *screen);
void meta_screen_update_cursor (MetaScreen *screen,
MetaDevice *pointer);
void meta_screen_tab_popup_create (MetaScreen *screen,
MetaTabList list_type,
@@ -182,9 +185,11 @@ void meta_screen_tile_preview_update (MetaScreen *screen,
void meta_screen_tile_preview_hide (MetaScreen *screen);
MetaWindow* meta_screen_get_mouse_window (MetaScreen *screen,
MetaDevice *pointer,
MetaWindow *not_this_one);
const MetaMonitorInfo* meta_screen_get_current_monitor_info (MetaScreen *screen);
const MetaMonitorInfo* meta_screen_get_current_monitor_info (MetaScreen *screen,
MetaDevice *pointer);
const MetaMonitorInfo* meta_screen_get_monitor_for_rect (MetaScreen *screen,
MetaRectangle *rect);
const MetaMonitorInfo* meta_screen_get_monitor_for_window (MetaScreen *screen,

View File

@@ -37,9 +37,11 @@
#include "workspace-private.h"
#include "keybindings-private.h"
#include "stack.h"
#include "core.h"
#include "xprops.h"
#include <meta/compositor.h>
#include "mutter-enum-types.h"
#include "device-pointer.h"
#include <X11/extensions/Xinerama.h>
@@ -621,7 +623,6 @@ meta_screen_new (MetaDisplay *display,
MetaScreen *screen;
Window xroot;
Display *xdisplay;
XWindowAttributes attr;
Window new_wm_sn_owner;
Window current_wm_sn_owner;
gboolean replace_current_wm;
@@ -736,15 +737,15 @@ meta_screen_new (MetaDisplay *display,
/* We need to or with the existing event mask since
* gtk+ may be interested in other events.
*/
XGetWindowAttributes (xdisplay, xroot, &attr);
XSelectInput (xdisplay,
xroot,
SubstructureRedirectMask | SubstructureNotifyMask |
ColormapChangeMask | PropertyChangeMask |
LeaveWindowMask | EnterWindowMask |
KeyPressMask | KeyReleaseMask |
FocusChangeMask | StructureNotifyMask |
ExposureMask | attr.your_event_mask);
meta_core_select_events (xdisplay, xroot,
(SubstructureRedirectMask | SubstructureNotifyMask |
ColormapChangeMask | PropertyChangeMask |
LeaveWindowMask | EnterWindowMask |
KeyPressMask | KeyReleaseMask |
FocusChangeMask | StructureNotifyMask |
ExposureMask),
TRUE);
if (meta_error_trap_pop_with_return (display) != Success)
{
meta_warning (_("Screen %d on display \"%s\" already has a window manager\n"),
@@ -766,10 +767,10 @@ meta_screen_new (MetaDisplay *display,
screen->rect.x = screen->rect.y = 0;
screen->rect.width = WidthOfScreen (screen->xscreen);
screen->rect.height = HeightOfScreen (screen->xscreen);
screen->current_cursor = -1; /* invalid/unset */
screen->default_xvisual = DefaultVisualOfScreen (screen->xscreen);
screen->default_depth = DefaultDepthOfScreen (screen->xscreen);
screen->flash_window = None;
screen->cursors = g_hash_table_new (NULL, NULL);
screen->wm_sn_selection_window = new_wm_sn_owner;
screen->wm_sn_atom = wm_sn_atom;
@@ -794,8 +795,6 @@ meta_screen_new (MetaDisplay *display,
screen->last_monitor_index = 0;
reload_monitor_infos (screen);
meta_screen_set_cursor (screen, META_CURSOR_DEFAULT);
/* Handle creating a no_focus_window for this screen */
screen->no_focus_window =
@@ -930,7 +929,10 @@ meta_screen_free (MetaScreen *screen,
meta_stack_tracker_free (screen->stack_tracker);
meta_error_trap_push_with_return (screen->display);
XSelectInput (screen->display->xdisplay, screen->xroot, 0);
meta_core_select_events (screen->display->xdisplay,
screen->xroot, NoEventMask,
FALSE);
if (meta_error_trap_pop_with_return (screen->display) != Success)
meta_warning (_("Could not release screen %d on display \"%s\"\n"),
screen->number, screen->display->name);
@@ -954,6 +956,8 @@ meta_screen_free (MetaScreen *screen,
g_free (screen->screen_name);
g_hash_table_destroy (screen->cursors);
g_object_unref (screen);
XFlush (display->xdisplay);
@@ -1464,7 +1468,30 @@ update_num_workspaces (MetaScreen *screen,
MetaWorkspace *last_remaining;
gboolean need_change_space;
new_num = meta_prefs_get_num_workspaces ();
if (meta_prefs_get_dynamic_workspaces ())
{
int n_items;
gulong *list;
n_items = 0;
list = NULL;
if (meta_prop_get_cardinal_list (screen->display, screen->xroot,
screen->display->atom__NET_NUMBER_OF_DESKTOPS,
&list, &n_items))
{
new_num = list[0];
meta_XFree (list);
}
else
{
new_num = 1;
}
}
else
{
new_num = meta_prefs_get_num_workspaces ();
}
g_assert (new_num > 0);
@@ -1549,31 +1576,33 @@ update_focus_mode (MetaScreen *screen)
void
meta_screen_set_cursor (MetaScreen *screen,
MetaDevice *pointer,
MetaCursor cursor)
{
Cursor xcursor;
MetaCursor old_cursor;
if (cursor == screen->current_cursor)
old_cursor = GPOINTER_TO_UINT (g_hash_table_lookup (screen->cursors, pointer));
if (cursor == old_cursor)
return;
screen->current_cursor = cursor;
xcursor = meta_display_create_x_cursor (screen->display, cursor);
XDefineCursor (screen->display->xdisplay, screen->xroot, xcursor);
XFlush (screen->display->xdisplay);
XFreeCursor (screen->display->xdisplay, xcursor);
g_hash_table_insert (screen->cursors, pointer,
GUINT_TO_POINTER (cursor));
meta_screen_update_cursor (screen, pointer);
}
void
meta_screen_update_cursor (MetaScreen *screen)
meta_screen_update_cursor (MetaScreen *screen,
MetaDevice *pointer)
{
Cursor xcursor;
MetaCursor cursor;
xcursor = meta_display_create_x_cursor (screen->display,
screen->current_cursor);
XDefineCursor (screen->display->xdisplay, screen->xroot, xcursor);
cursor = GPOINTER_TO_UINT (g_hash_table_lookup (screen->cursors, pointer));
meta_device_pointer_set_window_cursor (META_DEVICE_POINTER (pointer),
screen->xroot,
cursor);
XFlush (screen->display->xdisplay);
XFreeCursor (screen->display->xdisplay, xcursor);
}
void
@@ -1827,8 +1856,20 @@ static gboolean
meta_screen_tile_preview_update_timeout (gpointer data)
{
MetaScreen *screen = data;
MetaWindow *window = screen->display->grab_window;
MetaWindow *window = NULL;
gboolean needs_preview = FALSE;
MetaGrabInfo *grab_info;
MetaDevice *pointer = NULL;
GHashTableIter iter;
/* FIXME: we're just handling the first grab we find */
g_hash_table_iter_init (&iter, screen->display->current_grabs);
if (g_hash_table_iter_next (&iter, NULL, (gpointer *) &grab_info))
{
window = grab_info->grab_window;
pointer = grab_info->grab_pointer;
}
screen->tile_preview_timeout_id = 0;
@@ -1871,7 +1912,7 @@ meta_screen_tile_preview_update_timeout (gpointer data)
MetaRectangle tile_rect;
meta_window_get_current_tile_area (window, &tile_rect);
meta_tile_preview_show (screen->tile_preview, &tile_rect);
meta_tile_preview_show (screen->tile_preview, pointer, &tile_rect);
}
else
meta_tile_preview_hide (screen->tile_preview);
@@ -1916,28 +1957,23 @@ meta_screen_tile_preview_hide (MetaScreen *screen)
MetaWindow*
meta_screen_get_mouse_window (MetaScreen *screen,
MetaDevice *pointer,
MetaWindow *not_this_one)
{
MetaWindow *window;
Window root_return, child_return;
int root_x_return, root_y_return;
int win_x_return, win_y_return;
unsigned int mask_return;
if (not_this_one)
meta_topic (META_DEBUG_FOCUS,
"Focusing mouse window excluding %s\n", not_this_one->desc);
meta_error_trap_push (screen->display);
XQueryPointer (screen->display->xdisplay,
screen->xroot,
&root_return,
&child_return,
&root_x_return,
&root_y_return,
&win_x_return,
&win_y_return,
&mask_return);
meta_device_pointer_query_position (META_DEVICE_POINTER (pointer),
screen->xroot,
NULL, NULL,
&root_x_return,
&root_y_return,
NULL, NULL, NULL);
meta_error_trap_pop (screen->display);
window = meta_stack_get_default_focus_window_at_point (screen->stack,
@@ -2033,6 +2069,7 @@ meta_screen_get_natural_monitor_list (MetaScreen *screen,
const MetaMonitorInfo* current;
const MetaMonitorInfo* tmp;
GQueue* monitor_queue;
MetaDevice *pointer;
int* visited;
int cur = 0;
int i;
@@ -2040,6 +2077,9 @@ meta_screen_get_natural_monitor_list (MetaScreen *screen,
*n_monitors = screen->n_monitor_infos;
*monitors_list = g_new (int, screen->n_monitor_infos);
pointer = meta_device_map_lookup (screen->display->device_map,
META_CORE_POINTER_ID);
/* we calculate a natural ordering by which to choose monitors for
* window placement. We start at the current monitor, and perform
* a breadth-first search of the monitors starting from that
@@ -2054,7 +2094,7 @@ meta_screen_get_natural_monitor_list (MetaScreen *screen,
visited[i] = FALSE;
}
current = meta_screen_get_current_monitor_info (screen);
current = meta_screen_get_current_monitor_info (screen, pointer);
monitor_queue = g_queue_new ();
g_queue_push_tail (monitor_queue, (gpointer) current);
visited[current->number] = TRUE;
@@ -2121,11 +2161,12 @@ meta_screen_get_natural_monitor_list (MetaScreen *screen,
}
const MetaMonitorInfo*
meta_screen_get_current_monitor_info (MetaScreen *screen)
meta_screen_get_current_monitor_info (MetaScreen *screen,
MetaDevice *pointer)
{
int monitor_index;
monitor_index = meta_screen_get_current_monitor (screen);
return &screen->monitor_infos[monitor_index];
int monitor_index;
monitor_index = meta_screen_get_current_monitor (screen, pointer);
return &screen->monitor_infos[monitor_index];
}
/**
@@ -2137,7 +2178,8 @@ meta_screen_get_current_monitor_info (MetaScreen *screen)
* Return value: a monitor index
*/
int
meta_screen_get_current_monitor (MetaScreen *screen)
meta_screen_get_current_monitor (MetaScreen *screen,
MetaDevice *pointer)
{
if (screen->n_monitor_infos == 1)
return 0;
@@ -2147,24 +2189,18 @@ meta_screen_get_current_monitor (MetaScreen *screen)
if (screen->display->monitor_cache_invalidated)
{
Window root_return, child_return;
int win_x_return, win_y_return;
unsigned int mask_return;
int i;
MetaRectangle pointer_position;
screen->display->monitor_cache_invalidated = FALSE;
pointer_position.width = pointer_position.height = 1;
XQueryPointer (screen->display->xdisplay,
screen->xroot,
&root_return,
&child_return,
&pointer_position.x,
&pointer_position.y,
&win_x_return,
&win_y_return,
&mask_return);
meta_device_pointer_query_position (META_DEVICE_POINTER (pointer),
screen->xroot,
NULL, NULL,
&pointer_position.x,
&pointer_position.y,
NULL, NULL, NULL);
screen->last_monitor_index = 0;
for (i = 0; i < screen->n_monitor_infos; i++)
@@ -2878,6 +2914,22 @@ meta_screen_resize (MetaScreen *screen,
reload_monitor_infos (screen);
set_desktop_geometry_hint (screen);
/* Resize the guard window to fill the screen again. */
if (screen->guard_window != None)
{
XWindowChanges changes;
changes.x = 0;
changes.y = 0;
changes.width = width;
changes.height = height;
XConfigureWindow(screen->display->xdisplay,
screen->guard_window,
CWX | CWY | CWWidth | CWHeight,
&changes);
}
if (screen->display->compositor)
meta_compositor_sync_screen_size (screen->display->compositor,
screen, width, height);
@@ -3021,17 +3073,22 @@ static gboolean startup_sequence_timeout (void *data);
static void
update_startup_feedback (MetaScreen *screen)
{
MetaDevice *pointer;
pointer = meta_device_map_lookup (screen->display->device_map,
META_CORE_POINTER_ID);
if (screen->startup_sequences != NULL)
{
meta_topic (META_DEBUG_STARTUP,
"Setting busy cursor\n");
meta_screen_set_cursor (screen, META_CURSOR_BUSY);
meta_screen_set_cursor (screen, pointer, META_CURSOR_BUSY);
}
else
{
meta_topic (META_DEBUG_STARTUP,
"Setting default cursor\n");
meta_screen_set_cursor (screen, META_CURSOR_DEFAULT);
meta_screen_set_cursor (screen, pointer, META_CURSOR_DEFAULT);
}
}

View File

@@ -274,13 +274,23 @@ meta_stack_update_window_tile_matches (MetaStack *stack,
g_list_free (windows);
}
typedef struct _FocusedForeachData FocusedForeachData;
struct _FocusedForeachData
{
MetaWindow *window;
gboolean focused_transient;
};
static gboolean
is_focused_foreach (MetaWindow *window,
void *data)
{
if (window == window->display->expected_focus_window)
FocusedForeachData *focused_data = data;
if (window == focused_data->window)
{
*((gboolean*) data) = TRUE;
focused_data->focused_transient = TRUE;
return FALSE;
}
return TRUE;
@@ -303,6 +313,9 @@ get_standalone_layer (MetaWindow *window)
{
MetaStackLayer layer;
gboolean focused_transient = FALSE;
MetaFocusInfo *focus_info;
MetaDevice *keyboard;
FocusedForeachData focused_data = { 0 };
switch (window->type)
{
@@ -326,20 +339,30 @@ get_standalone_layer (MetaWindow *window)
case META_WINDOW_OVERRIDE_OTHER:
layer = META_LAYER_OVERRIDE_REDIRECT;
break;
default:
default:
/* FIXME: How about other keyboards? should
* we allow fullscreen for non-VCP/K anyway?
*/
keyboard = meta_device_map_lookup (window->display->device_map,
META_CORE_KEYBOARD_ID);
focus_info = meta_display_get_focus_info (window->display, keyboard);
focused_data.window = focus_info->expected_focus_window;
meta_window_foreach_transient (window,
is_focused_foreach,
&focused_transient);
&focused_data);
if (window->wm_state_below)
layer = META_LAYER_BOTTOM;
else if (window->fullscreen &&
(focused_transient ||
window == window->display->expected_focus_window ||
window->display->expected_focus_window == NULL ||
(window->display->expected_focus_window != NULL &&
!focus_info ||
window == focus_info->expected_focus_window ||
focus_info->expected_focus_window == NULL ||
(focus_info->expected_focus_window != NULL &&
windows_on_different_monitor (window,
window->display->expected_focus_window))))
focus_info->expected_focus_window))))
layer = META_LAYER_FULLSCREEN;
else if (window->wm_state_above && !META_WINDOW_MAXIMIZED (window))
layer = META_LAYER_TOP;

View File

@@ -50,6 +50,7 @@ meta_topic_real_valist (MetaDebugTopic topic,
static gint verbose_topics = 0;
static gboolean is_debugging = FALSE;
static gboolean replace_current = FALSE;
static gboolean use_core_devices = FALSE;
static int no_prefix = 0;
#ifdef WITH_VERBOSE_MODE
@@ -178,6 +179,18 @@ meta_set_debugging (gboolean setting)
is_debugging = setting;
}
gboolean
meta_get_use_core_devices (void)
{
return use_core_devices;
}
void
meta_set_use_core_devices (gboolean setting)
{
use_core_devices = setting;
}
gboolean
meta_get_replace_current_wm (void)
{

View File

@@ -115,6 +115,10 @@ struct _MetaWindow
Window xgroup_leader;
Window xclient_leader;
/* window menu if any, and the pointer that popped it up */
MetaWindowMenu *menu;
MetaDevice *menu_device;
/* Initial workspace property */
int initial_workspace;
@@ -333,6 +337,12 @@ struct _MetaWindow
/* if TRUE, window is attached to its parent */
guint attached : 1;
/* if TRUE, window didn't yet get the FocusIn for window->focus_keyboard */
guint expecting_focus_in : 1;
/* Keyboard currently owning the window focus, or NULL */
MetaDevice *focus_keyboard;
/* if non-NULL, the bounds of the window frame */
cairo_region_t *frame_bounds;
@@ -413,6 +423,12 @@ struct _MetaWindow
/* The currently complementary tiled window, if any */
MetaWindow *tile_match;
/* Current grab op for this window, or NULL */
MetaGrabInfo *cur_grab;
/* Focus info if the window is focused, or NULL */
MetaFocusInfo *cur_focus;
};
struct _MetaWindowClass
@@ -569,6 +585,7 @@ void meta_window_set_current_workspace_hint (MetaWindow *window);
unsigned long meta_window_get_net_wm_desktop (MetaWindow *window);
void meta_window_show_menu (MetaWindow *window,
MetaDevice *device,
int root_x,
int root_y,
int button,
@@ -618,8 +635,10 @@ void meta_window_free_delete_dialog (MetaWindow *window);
void meta_window_update_keyboard_resize (MetaWindow *window,
MetaDevice *device,
gboolean update_cursor);
void meta_window_update_keyboard_move (MetaWindow *window);
void meta_window_update_keyboard_move (MetaWindow *window,
MetaDevice *device);
void meta_window_update_layer (MetaWindow *window);
@@ -641,11 +660,19 @@ void meta_window_update_for_monitors_changed (MetaWindow *window);
void meta_window_update_on_all_workspaces (MetaWindow *window);
void meta_window_propagate_focus_appearance (MetaWindow *window,
MetaDevice *keyboard,
gboolean focused);
gboolean meta_window_should_attach_to_parent (MetaWindow *window);
gboolean meta_window_can_tile_side_by_side (MetaWindow *window);
gboolean meta_window_can_tile_side_by_side (MetaWindow *window,
MetaDevice *pointer);
void meta_window_compute_tile_match (MetaWindow *window);
void meta_window_set_client_pointer (MetaWindow *window,
MetaDevice *pointer);
MetaDevice * meta_window_get_client_pointer (MetaWindow *window);
MetaDevice * meta_window_guess_grab_pointer (MetaWindow *window);
#endif

View File

@@ -78,74 +78,38 @@ static MetaWindowPropHooks* find_hooks (MetaDisplay *display,
void
meta_window_reload_property (MetaWindow *window,
Atom property,
gboolean initial)
meta_window_reload_property_from_xwindow (MetaWindow *window,
Window xwindow,
Atom property,
gboolean initial)
{
meta_window_reload_properties (window, &property, 1, initial);
}
MetaPropValue value = { 0, };
MetaWindowPropHooks *hooks;
void
meta_window_reload_properties (MetaWindow *window,
const Atom *properties,
int n_properties,
gboolean initial)
{
meta_window_reload_properties_from_xwindow (window,
window->xwindow,
properties,
n_properties,
initial);
}
hooks = find_hooks (window->display, property);
if (!hooks)
return;
void
meta_window_reload_property_from_xwindow (MetaWindow *window,
Window xwindow,
Atom property,
gboolean initial)
{
meta_window_reload_properties_from_xwindow (window, xwindow, &property, 1,
initial);
}
init_prop_value (window, hooks, &value);
void
meta_window_reload_properties_from_xwindow (MetaWindow *window,
Window xwindow,
const Atom *properties,
int n_properties,
gboolean initial)
{
int i;
MetaPropValue *values;
g_return_if_fail (properties != NULL);
g_return_if_fail (n_properties > 0);
values = g_new0 (MetaPropValue, n_properties);
i = 0;
while (i < n_properties)
{
MetaWindowPropHooks *hooks = find_hooks (window->display, properties[i]);
init_prop_value (window, hooks, &values[i]);
++i;
}
meta_prop_get_values (window->display, xwindow,
values, n_properties);
&value, 1);
i = 0;
while (i < n_properties)
{
MetaWindowPropHooks *hooks = find_hooks (window->display, properties[i]);
reload_prop_value (window, hooks, &values[i], initial);
++i;
}
reload_prop_value (window, hooks, &value,
initial);
meta_prop_free_values (values, n_properties);
g_free (values);
meta_prop_free_values (&value, 1);
}
static void
meta_window_reload_property (MetaWindow *window,
Atom property,
gboolean initial)
{
meta_window_reload_property_from_xwindow (window,
window->xwindow,
property,
initial);
}
void
@@ -1474,6 +1438,13 @@ reload_transient_for (MetaWindow *window,
MetaWindow *parent = NULL;
Window transient_for, old_transient_for;
if (meta_window_appears_focused (window) && window->xtransient_for != None)
meta_window_propagate_focus_appearance (window,
window->focus_keyboard,
FALSE);
window->xtransient_for = None;
if (value->type != META_PROP_VALUE_INVALID)
{
transient_for = value->v.xwindow;
@@ -1510,7 +1481,9 @@ reload_transient_for (MetaWindow *window,
return;
if (meta_window_appears_focused (window) && window->xtransient_for != None)
meta_window_propagate_focus_appearance (window, FALSE);
meta_window_propagate_focus_appearance (window,
window->focus_keyboard,
FALSE);
old_transient_for = window->xtransient_for;
window->xtransient_for = transient_for;
@@ -1563,7 +1536,9 @@ reload_transient_for (MetaWindow *window,
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
if (meta_window_appears_focused (window) && window->xtransient_for != None)
meta_window_propagate_focus_appearance (window, TRUE);
meta_window_propagate_focus_appearance (window,
window->focus_keyboard,
TRUE);
}
static void

View File

@@ -35,35 +35,6 @@
#include "window-private.h"
/**
* meta_window_reload_property:
* @window: The window.
* @property: A single X atom.
*
* Requests the current values of a single property for a given
* window from the server, and deals with it appropriately.
* Does not return it to the caller (it's been dealt with!)
*/
void meta_window_reload_property (MetaWindow *window,
Atom property,
gboolean initial);
/**
* meta_window_reload_properties:
* @window: The window.
* @properties: A pointer to a list of X atoms, "n_properties" long.
* @n_properties: The length of the properties list.
*
* Requests the current values of a set of properties for a given
* window from the server, and deals with them appropriately.
* Does not return them to the caller (they've been dealt with!)
*/
void meta_window_reload_properties (MetaWindow *window,
const Atom *properties,
int n_properties,
gboolean initial);
/**
* meta_window_reload_property_from_xwindow:
* @window: A window on the same display as the one we're
@@ -75,30 +46,10 @@ void meta_window_reload_properties (MetaWindow *window,
* window from the server, and deals with it appropriately.
* Does not return it to the caller (it's been dealt with!)
*/
void meta_window_reload_property_from_xwindow
(MetaWindow *window,
Window xwindow,
Atom property,
gboolean initial);
/**
* meta_window_reload_properties_from_xwindow:
* @window: A window on the same display as the one we're
* investigating (only used to find the display)
* @xwindow: The X handle for the window.
* @properties: A pointer to a list of X atoms, "n_properties" long.
* @n_properties: The length of the properties list.
*
* Requests the current values of a set of properties for a given
* window from the server, and deals with them appropriately.
* Does not return them to the caller (they've been dealt with!)
*/
void meta_window_reload_properties_from_xwindow
(MetaWindow *window,
Window xwindow,
const Atom *properties,
int n_properties,
gboolean initial);
void meta_window_reload_property_from_xwindow (MetaWindow *window,
Window xwindow,
Atom property,
gboolean initial);
/**
* meta_window_load_initial_properties:

File diff suppressed because it is too large Load Diff

View File

@@ -95,6 +95,7 @@ GList* meta_workspace_get_onmonitor_region (MetaWorkspace *workspace,
int which_monitor);
void meta_workspace_focus_default_window (MetaWorkspace *workspace,
MetaDevice *pointer,
MetaWindow *not_this_one,
guint32 timestamp);

View File

@@ -538,7 +538,9 @@ meta_workspace_activate_with_focus (MetaWorkspace *workspace,
MetaWorkspaceLayout layout1, layout2;
gint num_workspaces, current_space, new_space;
MetaMotionDirection direction;
MetaGrabInfo *grab_info;
GHashTableIter iter;
meta_verbose ("Activating workspace %d\n",
meta_workspace_index (workspace));
@@ -547,7 +549,7 @@ meta_workspace_activate_with_focus (MetaWorkspace *workspace,
/* Free any cached pointers to the workspaces's edges from
* a current resize or move operation */
meta_display_cleanup_edges (workspace->screen->display);
meta_display_cleanup_edges (workspace->screen->display, workspace->screen);
if (workspace->screen->active_workspace)
workspace_switch_sound (workspace->screen->active_workspace, workspace);
@@ -570,10 +572,22 @@ meta_workspace_activate_with_focus (MetaWorkspace *workspace,
return;
move_window = NULL;
if (workspace->screen->display->grab_op == META_GRAB_OP_MOVING ||
workspace->screen->display->grab_op == META_GRAB_OP_KEYBOARD_MOVING)
move_window = workspace->screen->display->grab_window;
/* FIXME: not quite multidevice friendly, but the whole
* "move window to another workspace" isn't.
*/
g_hash_table_iter_init (&iter, workspace->screen->display->current_grabs);
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &grab_info))
{
if (grab_info->grab_op == META_GRAB_OP_MOVING ||
grab_info->grab_op == META_GRAB_OP_KEYBOARD_MOVING)
{
move_window = grab_info->grab_window;
break;
}
}
if (move_window != NULL)
{
if (move_window->on_all_workspaces)
@@ -673,8 +687,13 @@ meta_workspace_activate_with_focus (MetaWorkspace *workspace,
}
else
{
MetaDevice *pointer;
pointer = meta_device_map_lookup (screen->display->device_map,
META_CORE_POINTER_ID);
meta_topic (META_DEBUG_FOCUS, "Focusing default window on new workspace\n");
meta_workspace_focus_default_window (workspace, NULL, timestamp);
meta_workspace_focus_default_window (workspace, pointer,
NULL, timestamp);
}
/* Emit switched signal from screen.c */
@@ -774,7 +793,7 @@ meta_workspace_invalidate_work_area (MetaWorkspace *workspace)
/* If we are in the middle of a resize or move operation, we
* might have cached pointers to the workspace's edges */
if (workspace == workspace->screen->active_workspace)
meta_display_cleanup_edges (workspace->screen->display);
meta_display_cleanup_edges (workspace->screen->display, workspace->screen);
g_free (workspace->work_area_monitor);
workspace->work_area_monitor = NULL;
@@ -1198,6 +1217,7 @@ meta_workspace_get_name (MetaWorkspace *workspace)
void
meta_workspace_focus_default_window (MetaWorkspace *workspace,
MetaDevice *pointer,
MetaWindow *not_this_one,
guint32 timestamp)
{
@@ -1214,7 +1234,8 @@ meta_workspace_focus_default_window (MetaWorkspace *workspace,
else
{
MetaWindow * window;
window = meta_screen_get_mouse_window (workspace->screen, not_this_one);
window = meta_screen_get_mouse_window (workspace->screen,
pointer, not_this_one);
if (window &&
window->type != META_WINDOW_DOCK &&
window->type != META_WINDOW_DESKTOP)

46
src/meta/device-map.h Normal file
View File

@@ -0,0 +1,46 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_DEVICE_MAP_H
#define META_DEVICE_MAP_H
#include <glib-object.h>
#include <meta/types.h>
#include <meta/device.h>
#define META_TYPE_DEVICE_MAP (meta_device_map_get_type ())
#define META_DEVICE_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE_MAP, MetaDeviceMap))
#define META_DEVICE_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE_MAP, MetaDeviceMapClass))
#define META_IS_DEVICE_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE_MAP))
#define META_IS_DEVICE_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE_MAP))
#define META_DEVICE_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE_MAP, MetaDeviceMapClass))
typedef struct _MetaDeviceMapClass MetaDeviceMapClass;
GType meta_device_map_get_type (void) G_GNUC_CONST;
MetaDevice * meta_device_map_lookup (MetaDeviceMap *device_map,
gint device_id);
MetaDisplay * meta_device_map_get_display (MetaDeviceMap *device_map);
GList * meta_device_map_list_devices (MetaDeviceMap *device_map);
#endif

44
src/meta/device.h Normal file
View File

@@ -0,0 +1,44 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2011 Carlos Garnacho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef META_DEVICE_H
#define META_DEVICE_H
#include <glib-object.h>
#include <meta/types.h>
#define META_TYPE_DEVICE (meta_device_get_type ())
#define META_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_DEVICE, MetaDevice))
#define META_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DEVICE, MetaDeviceClass))
#define META_IS_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_DEVICE))
#define META_IS_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DEVICE))
#define META_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DEVICE, MetaDeviceClass))
typedef struct _MetaDeviceClass MetaDeviceClass;
GType meta_device_get_type (void) G_GNUC_CONST;
int meta_device_get_id (MetaDevice *device);
MetaDisplay *meta_device_get_display (MetaDevice *device);
MetaDevice * meta_device_get_paired_device (MetaDevice *device);
#endif

View File

@@ -28,6 +28,7 @@
#include <meta/types.h>
#include <meta/prefs.h>
#include <meta/common.h>
#include <meta/device-map.h>
typedef enum
{
@@ -75,6 +76,9 @@ gboolean meta_display_has_shape (MetaDisplay *display);
MetaScreen *meta_display_screen_for_root (MetaDisplay *display,
Window xroot);
MetaWindow *meta_display_get_keyboard_focus_window (MetaDisplay *display,
MetaDevice *keyboard);
MetaWindow *meta_display_get_focus_window (MetaDisplay *display);
gboolean meta_display_xwindow_is_a_no_focus_window (MetaDisplay *display,
@@ -111,9 +115,30 @@ MetaWindow* meta_display_get_tab_current (MetaDisplay *display,
MetaScreen *screen,
MetaWorkspace *workspace);
GList* meta_display_get_device_tab_list (MetaDisplay *display,
MetaTabList type,
MetaScreen *screen,
MetaWorkspace *workspace,
MetaDevice *device);
MetaWindow* meta_display_get_device_tab_next (MetaDisplay *display,
MetaTabList type,
MetaScreen *screen,
MetaWorkspace *workspace,
MetaWindow *window,
MetaDevice *device,
gboolean backward);
MetaWindow* meta_display_get_device_tab_current (MetaDisplay *display,
MetaTabList type,
MetaScreen *screen,
MetaWorkspace *workspace,
MetaDevice *device);
gboolean meta_display_begin_grab_op (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
MetaDevice *device,
MetaGrabOp op,
gboolean pointer_already_grabbed,
gboolean frame_action,
@@ -123,6 +148,7 @@ gboolean meta_display_begin_grab_op (MetaDisplay *display,
int root_x,
int root_y);
void meta_display_end_grab_op (MetaDisplay *display,
MetaDevice *device,
guint32 timestamp);
MetaGrabOp meta_display_get_grab_op (MetaDisplay *display);
@@ -137,10 +163,23 @@ gboolean meta_display_add_keybinding (MetaDisplay *display,
gboolean meta_display_remove_keybinding (MetaDisplay *display,
const char *name);
MetaGrabOp meta_display_get_device_grab_op (MetaDisplay *display,
MetaDevice *device);
MetaKeyBindingAction meta_display_get_keybinding_action (MetaDisplay *display,
unsigned int keycode,
unsigned long mask);
void meta_display_set_keyboard_focus (MetaDisplay *display,
MetaWindow *window,
MetaDevice *keyboard,
gboolean focus_frame,
guint32 timestamp);
void meta_display_unset_keyboard_focus (MetaDisplay *display,
MetaScreen *screen,
MetaDevice *keyboard,
guint32 timestamp);
/* meta_display_set_input_focus_window is like XSetInputFocus, except
* that (a) it can't detect timestamps later than the current time,
* since Mutter isn't part of the XServer, and thus gives erroneous
@@ -176,5 +215,6 @@ void meta_display_unmanage_screen (MetaDisplay *display,
guint32 timestamp);
void meta_display_clear_mouse_mode (MetaDisplay *display);
MetaDeviceMap * meta_display_get_device_map (MetaDisplay *display);
#endif

View File

@@ -41,6 +41,10 @@ void meta_keybindings_switch_window (MetaDisplay *display,
MetaKeyBinding *binding);
void meta_screen_ungrab_all_keys (MetaScreen *screen, guint32 timestamp);
gboolean meta_screen_grab_all_keys (MetaScreen *screen, guint32 timestamp);
void meta_screen_ungrab_all_keys (MetaScreen *screen,
MetaDevice *device,
guint32 timestamp);
gboolean meta_screen_grab_all_keys (MetaScreen *screen,
MetaDevice *device,
guint32 timestamp);
#endif

View File

@@ -39,15 +39,7 @@
#define META_IS_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_PLUGIN))
#define META_PLUGIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_PLUGIN, MetaPluginClass))
/**
* MetaPlugin: (skip)
*
*/
typedef struct _MetaPlugin MetaPlugin;
/**
* MetaPluginClass: (skip)
*
*/
typedef struct _MetaPluginClass MetaPluginClass;
typedef struct _MetaPluginVersion MetaPluginVersion;
typedef struct _MetaPluginInfo MetaPluginInfo;
@@ -106,6 +98,10 @@ struct _MetaPluginClass
/* General XEvent filter. This is fired *before* meta itself handles
* an event. Return TRUE to block any further processing.
*/
/**
* MetaPluginClass::xevent_filter:
* @event: (type xlib.XEvent):
*/
gboolean (*xevent_filter) (MetaPlugin *plugin,
XEvent *event);

View File

@@ -45,6 +45,7 @@ typedef enum
META_PREF_ACTION_RIGHT_CLICK_TITLEBAR,
META_PREF_AUTO_RAISE,
META_PREF_AUTO_RAISE_DELAY,
META_PREF_FOCUS_CHANGE_ON_POINTER_REST,
META_PREF_THEME,
META_PREF_TITLEBAR_FONT,
META_PREF_NUM_WORKSPACES,
@@ -100,6 +101,7 @@ gboolean meta_prefs_get_application_based (void);
gboolean meta_prefs_get_disable_workarounds (void);
gboolean meta_prefs_get_auto_raise (void);
int meta_prefs_get_auto_raise_delay (void);
gboolean meta_prefs_get_focus_change_on_pointer_rest (void);
gboolean meta_prefs_get_gnome_accessibility (void);
gboolean meta_prefs_get_gnome_animations (void);
gboolean meta_prefs_get_edge_tiling (void);

View File

@@ -77,7 +77,8 @@ MetaWorkspace * meta_screen_get_active_workspace (MetaScreen *screen);
int meta_screen_get_n_monitors (MetaScreen *screen);
int meta_screen_get_primary_monitor (MetaScreen *screen);
int meta_screen_get_current_monitor (MetaScreen *screen);
int meta_screen_get_current_monitor (MetaScreen *screen,
MetaDevice *pointer);
void meta_screen_get_monitor_geometry (MetaScreen *screen,
int monitor,
MetaRectangle *geometry);

View File

@@ -32,6 +32,8 @@ typedef struct _MetaFrame MetaFrame;
typedef struct _MetaScreen MetaScreen;
typedef struct _MetaWindow MetaWindow;
typedef struct _MetaWorkspace MetaWorkspace;
typedef struct _MetaDevice MetaDevice;
typedef struct _MetaDeviceMap MetaDeviceMap;
/**
* MetaGroup: (skip)
*

View File

@@ -38,6 +38,9 @@ gboolean meta_is_syncing (void);
void meta_set_syncing (gboolean setting);
void meta_set_replace_current_wm (gboolean setting);
gboolean meta_get_use_core_devices (void);
void meta_set_use_core_devices (gboolean setting);
void meta_debug_spew_real (const char *format,
...) G_GNUC_PRINTF (1, 2);
void meta_verbose_real (const char *format,

View File

@@ -189,6 +189,7 @@ void meta_window_focus (MetaWindow *window,
guint32 timestamp);
void meta_window_begin_grab_op (MetaWindow *window,
MetaDevice *device,
MetaGrabOp op,
gboolean frame_action,
guint32 timestamp);

View File

@@ -63,6 +63,16 @@
</_description>
</key>
<key name="focus-change-on-pointer-rest" type="b">
<default>false</default>
<_summary>Delay focus changes until the pointer stops moving</_summary>
<_description>
If set to true, and the focus mode is either "sloppy" or "mouse"
then the focus will not be changed immediately when entering a
window, but only after the pointer stops moving.
</_description>
</key>
<key name="draggable-border-width" type="i">
<default>10</default>
<range min="0" max="64"/>

View File

@@ -51,6 +51,7 @@ static void meta_frames_unmap (GtkWidget *widget);
static void meta_frames_update_prelit_control (MetaFrames *frames,
MetaUIFrame *frame,
GdkDevice *device,
MetaFrameControl control);
static gboolean meta_frames_button_press_event (GtkWidget *widget,
GdkEventButton *event);
@@ -637,10 +638,12 @@ meta_frames_unmanage_window (MetaFrames *frames,
if (frame)
{
#if 0
/* restore the cursor */
meta_core_set_screen_cursor (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
frame->xwindow,
META_CURSOR_DEFAULT);
#endif
gdk_window_set_user_data (frame->window, NULL);
@@ -1046,10 +1049,12 @@ meta_frame_titlebar_event (MetaUIFrame *frame,
int action)
{
MetaFrameFlags flags;
GdkDevice *pointer;
Display *display;
display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
pointer = gdk_event_get_device ((GdkEvent *) event);
switch (action)
{
case G_DESKTOP_TITLEBAR_ACTION_TOGGLE_SHADE:
@@ -1131,12 +1136,14 @@ meta_frame_titlebar_event (MetaUIFrame *frame,
case G_DESKTOP_TITLEBAR_ACTION_LOWER:
meta_core_user_lower_and_unfocus (display,
frame->xwindow,
gdk_x11_device_get_id (pointer),
event->time);
break;
case G_DESKTOP_TITLEBAR_ACTION_MENU:
meta_core_show_window_menu (display,
frame->xwindow,
gdk_x11_device_get_id (pointer),
event->x_root,
event->y_root,
event->button,
@@ -1182,7 +1189,9 @@ meta_frames_button_press_event (GtkWidget *widget,
MetaFrames *frames;
MetaFrameControl control;
Display *display;
GdkDevice *device;
int device_id;
frames = META_FRAMES (widget);
display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
@@ -1213,7 +1222,10 @@ meta_frames_button_press_event (GtkWidget *widget,
/* don't do the rest of this if on client area */
if (control == META_FRAME_CONTROL_CLIENT_AREA)
return FALSE; /* not on the frame, just passed through from client */
device = gdk_event_get_device ((GdkEvent *) event);
device_id = gdk_x11_device_get_id (device);
/* We want to shade even if we have a GrabOp, since we'll have a move grab
* if we double click the titlebar.
*/
@@ -1221,13 +1233,13 @@ meta_frames_button_press_event (GtkWidget *widget,
event->button == 1 &&
event->type == GDK_2BUTTON_PRESS)
{
meta_core_end_grab_op (display, event->time);
meta_core_end_grab_op (display, device_id, event->time);
return meta_frame_double_click_event (frame, event);
}
if (meta_core_get_grab_op (display) !=
if (meta_core_frame_has_grab (display, frame->xwindow, NULL, NULL) !=
META_GRAB_OP_NONE)
return FALSE; /* already up to something */
return FALSE; /* already up to something */
if (event->button == 1 &&
(control == META_FRAME_CONTROL_MAXIMIZE ||
@@ -1286,6 +1298,7 @@ meta_frames_button_press_event (GtkWidget *widget,
meta_core_begin_grab_op (display,
frame->xwindow,
device_id,
op,
TRUE,
TRUE,
@@ -1318,6 +1331,7 @@ meta_frames_button_press_event (GtkWidget *widget,
meta_core_show_window_menu (display,
frame->xwindow,
device_id,
rect->x + dx,
rect->y + rect->height + dy,
event->button,
@@ -1371,6 +1385,7 @@ meta_frames_button_press_event (GtkWidget *widget,
meta_core_begin_grab_op (display,
frame->xwindow,
device_id,
op,
TRUE,
TRUE,
@@ -1393,6 +1408,7 @@ meta_frames_button_press_event (GtkWidget *widget,
{
meta_core_begin_grab_op (display,
frame->xwindow,
device_id,
META_GRAB_OP_MOVING,
TRUE,
TRUE,
@@ -1416,28 +1432,28 @@ meta_frames_button_press_event (GtkWidget *widget,
}
void
meta_frames_notify_menu_hide (MetaFrames *frames)
meta_frames_notify_menu_hide (MetaFrames *frames,
Window client_xwindow)
{
Display *display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
if (meta_core_get_grab_op (display) ==
Window frame_xwindow;
int device_id;
frame_xwindow = meta_core_get_frame (display, client_xwindow);
if (frame_xwindow != None &&
meta_core_frame_has_grab (display, frame_xwindow, &device_id, NULL) ==
META_GRAB_OP_CLICKING_MENU)
{
Window grab_frame;
MetaUIFrame *frame;
grab_frame = meta_core_get_grab_frame (display);
frame = meta_frames_lookup_window (frames, frame_xwindow);
if (grab_frame != None)
if (frame)
{
MetaUIFrame *frame;
frame = meta_frames_lookup_window (frames, grab_frame);
if (frame)
{
redraw_control (frames, frame,
META_FRAME_CONTROL_MENU);
meta_core_end_grab_op (display, CurrentTime);
}
redraw_control (frames, frame,
META_FRAME_CONTROL_MENU);
meta_core_end_grab_op (display, device_id, CurrentTime);
}
}
}
@@ -1450,7 +1466,10 @@ meta_frames_button_release_event (GtkWidget *widget,
MetaFrames *frames;
MetaGrabOp op;
Display *display;
int grab_button;
GdkDevice *device;
int device_id, grab_device_id;
frames = META_FRAMES (widget);
display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
@@ -1458,17 +1477,21 @@ meta_frames_button_release_event (GtkWidget *widget,
if (frame == NULL)
return FALSE;
op = meta_core_get_grab_op (display);
op = meta_core_frame_has_grab (display, frame->xwindow,
&grab_device_id, &grab_button);
if (op == META_GRAB_OP_NONE)
device = gdk_event_get_device ((GdkEvent *) event);
device_id = gdk_x11_device_get_id (device);
if (op == META_GRAB_OP_NONE ||
grab_device_id != device_id)
return FALSE;
/* We only handle the releases we handled the presses for (things
* involving frame controls). Window ops that don't require a
* frame are handled in the Xlib part of the code, display.c/window.c
*/
if (frame->xwindow == meta_core_get_grab_frame (display) &&
((int) event->button) == meta_core_get_grab_button (display))
if (((int) event->button) == grab_button)
{
MetaFrameControl control;
@@ -1479,8 +1502,8 @@ meta_frames_button_release_event (GtkWidget *widget,
case META_GRAB_OP_CLICKING_MINIMIZE:
if (control == META_FRAME_CONTROL_MINIMIZE)
meta_core_minimize (display, frame->xwindow);
meta_core_end_grab_op (display, event->time);
meta_core_end_grab_op (display, device_id, event->time);
break;
case META_GRAB_OP_CLICKING_MAXIMIZE:
@@ -1492,67 +1515,67 @@ meta_frames_button_release_event (GtkWidget *widget,
event->time);
meta_core_maximize (display, frame->xwindow);
}
meta_core_end_grab_op (display, event->time);
meta_core_end_grab_op (display, device_id, event->time);
break;
case META_GRAB_OP_CLICKING_UNMAXIMIZE:
if (control == META_FRAME_CONTROL_UNMAXIMIZE)
meta_core_unmaximize (display, frame->xwindow);
meta_core_end_grab_op (display, event->time);
meta_core_end_grab_op (display, device_id, event->time);
break;
case META_GRAB_OP_CLICKING_DELETE:
if (control == META_FRAME_CONTROL_DELETE)
meta_core_delete (display, frame->xwindow, event->time);
meta_core_end_grab_op (display, event->time);
meta_core_end_grab_op (display, device_id, event->time);
break;
case META_GRAB_OP_CLICKING_MENU:
meta_core_end_grab_op (display, event->time);
meta_core_end_grab_op (display, device_id, event->time);
break;
case META_GRAB_OP_CLICKING_SHADE:
if (control == META_FRAME_CONTROL_SHADE)
meta_core_shade (display, frame->xwindow, event->time);
meta_core_end_grab_op (display, event->time);
meta_core_end_grab_op (display, device_id, event->time);
break;
case META_GRAB_OP_CLICKING_UNSHADE:
if (control == META_FRAME_CONTROL_UNSHADE)
meta_core_unshade (display, frame->xwindow, event->time);
meta_core_end_grab_op (display, event->time);
meta_core_end_grab_op (display, device_id, event->time);
break;
case META_GRAB_OP_CLICKING_ABOVE:
if (control == META_FRAME_CONTROL_ABOVE)
meta_core_make_above (display, frame->xwindow);
meta_core_end_grab_op (display, event->time);
meta_core_end_grab_op (display, device_id, event->time);
break;
case META_GRAB_OP_CLICKING_UNABOVE:
if (control == META_FRAME_CONTROL_UNABOVE)
meta_core_unmake_above (display, frame->xwindow);
meta_core_end_grab_op (display, event->time);
meta_core_end_grab_op (display, device_id, event->time);
break;
case META_GRAB_OP_CLICKING_STICK:
if (control == META_FRAME_CONTROL_STICK)
meta_core_stick (display, frame->xwindow);
meta_core_end_grab_op (display, event->time);
meta_core_end_grab_op (display, device_id, event->time);
break;
case META_GRAB_OP_CLICKING_UNSTICK:
if (control == META_FRAME_CONTROL_UNSTICK)
meta_core_unstick (display, frame->xwindow);
meta_core_end_grab_op (display, event->time);
meta_core_end_grab_op (display, device_id, event->time);
break;
default:
@@ -1564,7 +1587,9 @@ meta_frames_button_release_event (GtkWidget *widget,
* prelit so to let the user know that it can now be pressed.
* :)
*/
meta_frames_update_prelit_control (frames, frame, control);
meta_frames_update_prelit_control (frames, frame,
gdk_event_get_device ((GdkEvent *) event),
control);
}
return TRUE;
@@ -1573,12 +1598,12 @@ meta_frames_button_release_event (GtkWidget *widget,
static void
meta_frames_update_prelit_control (MetaFrames *frames,
MetaUIFrame *frame,
GdkDevice *device,
MetaFrameControl control)
{
MetaFrameControl old_control;
MetaCursor cursor;
meta_verbose ("Updating prelit control from %u to %u\n",
frame->prelit_control, control);
@@ -1643,6 +1668,7 @@ meta_frames_update_prelit_control (MetaFrames *frames,
/* set/unset the prelight cursor */
meta_core_set_screen_cursor (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
frame->xwindow,
gdk_x11_device_get_id (device),
cursor);
switch (control)
@@ -1696,8 +1722,8 @@ meta_frames_motion_notify_event (GtkWidget *widget,
frames->last_motion_frame = frame;
grab_op = meta_core_get_grab_op (display);
grab_op = meta_core_frame_has_grab (display, frame->xwindow, NULL, NULL);
switch (grab_op)
{
case META_GRAB_OP_CLICKING_MENU:
@@ -1713,10 +1739,9 @@ meta_frames_motion_notify_event (GtkWidget *widget,
case META_GRAB_OP_CLICKING_UNSTICK:
{
MetaFrameControl control;
int x, y;
gdk_window_get_device_position (frame->window, event->device,
&x, &y, NULL);
gdouble x, y;
gdk_event_get_coords ((GdkEvent *) event, &x, &y);
/* Control is set to none unless it matches
* the current grab
@@ -1747,21 +1772,23 @@ meta_frames_motion_notify_event (GtkWidget *widget,
control = META_FRAME_CONTROL_NONE;
/* Update prelit control and cursor */
meta_frames_update_prelit_control (frames, frame, control);
meta_frames_update_prelit_control (frames, frame,
gdk_event_get_device ((GdkEvent *) event),
control);
}
break;
case META_GRAB_OP_NONE:
{
MetaFrameControl control;
int x, y;
gdk_window_get_device_position (frame->window, event->device,
&x, &y, NULL);
gdouble x, y;
gdk_event_get_coords ((GdkEvent *) event, &x, &y);
control = get_control (frames, frame, x, y);
/* Update prelit control and cursor */
meta_frames_update_prelit_control (frames, frame, control);
meta_frames_update_prelit_control (frames, frame,
gdk_event_get_device ((GdkEvent *) event),
control);
}
break;
@@ -1909,7 +1936,6 @@ meta_frames_paint (MetaFrames *frames,
GdkPixbuf *icon;
int w, h;
MetaButtonState button_states[META_BUTTON_TYPE_LAST];
Window grab_frame;
int i;
MetaButtonLayout button_layout;
MetaGrabOp grab_op;
@@ -1920,11 +1946,8 @@ meta_frames_paint (MetaFrames *frames,
for (i = 0; i < META_BUTTON_TYPE_LAST; i++)
button_states[i] = META_BUTTON_STATE_NORMAL;
grab_frame = meta_core_get_grab_frame (display);
grab_op = meta_core_get_grab_op (display);
if (grab_frame != frame->xwindow)
grab_op = META_GRAB_OP_NONE;
grab_op = meta_core_frame_has_grab (display, frame->xwindow, NULL, NULL);
/* Set prelight state */
switch (frame->prelit_control)
{
@@ -2085,7 +2108,9 @@ meta_frames_enter_notify_event (GtkWidget *widget,
return FALSE;
control = get_control (frames, frame, event->x, event->y);
meta_frames_update_prelit_control (frames, frame, control);
meta_frames_update_prelit_control (frames, frame,
gdk_event_get_device ((GdkEvent *) event),
control);
return TRUE;
}
@@ -2103,7 +2128,9 @@ meta_frames_leave_notify_event (GtkWidget *widget,
if (frame == NULL)
return FALSE;
meta_frames_update_prelit_control (frames, frame, META_FRAME_CONTROL_NONE);
meta_frames_update_prelit_control (frames, frame,
gdk_event_get_device ((GdkEvent *) event),
META_FRAME_CONTROL_NONE);
return TRUE;
}

View File

@@ -156,7 +156,8 @@ void meta_frames_move_resize_frame (MetaFrames *frames,
void meta_frames_queue_draw (MetaFrames *frames,
Window xwindow);
void meta_frames_notify_menu_hide (MetaFrames *frames);
void meta_frames_notify_menu_hide (MetaFrames *frames,
Window client_xwindow);
Window meta_frames_get_moving_frame (MetaFrames *frames);

View File

@@ -137,7 +137,7 @@ menu_closed (GtkMenu *widget,
menu = data;
meta_frames_notify_menu_hide (menu->frames);
meta_frames_notify_menu_hide (menu->frames, menu->client_xwindow);
(* menu->func) (menu,
GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
menu->client_xwindow,
@@ -157,7 +157,7 @@ activate_cb (GtkWidget *menuitem, gpointer data)
md = data;
meta_frames_notify_menu_hide (md->menu->frames);
meta_frames_notify_menu_hide (md->menu->frames, md->menu->client_xwindow);
(* md->menu->func) (md->menu,
GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
md->menu->client_xwindow,
@@ -498,13 +498,17 @@ meta_window_menu_new (MetaFrames *frames,
void
meta_window_menu_popup (MetaWindowMenu *menu,
MetaDevice *device,
int root_x,
int root_y,
int button,
guint32 timestamp)
{
GdkDeviceManager *device_manager;
GdkDevice *gdkdevice;
GdkDisplay *display;
GdkPoint *pt;
pt = g_new (GdkPoint, 1);
g_object_set_data_full (G_OBJECT (menu->menu),
@@ -514,12 +518,18 @@ meta_window_menu_popup (MetaWindowMenu *menu,
pt->x = root_x;
pt->y = root_y;
gtk_menu_popup (GTK_MENU (menu->menu),
NULL, NULL,
popup_position_func, pt,
button,
timestamp);
display = gtk_widget_get_display (menu->menu);
device_manager = gdk_display_get_device_manager (display);
gdkdevice = gdk_x11_device_manager_lookup (device_manager,
meta_device_get_id (device));
gtk_menu_popup_for_device (GTK_MENU (menu->menu),
gdkdevice,
NULL, NULL,
popup_position_func, pt, NULL,
button,
timestamp);
if (!gtk_widget_get_visible (menu->menu))
meta_warning ("GtkMenu failed to grab the pointer\n");

Some files were not shown because too many files have changed in this diff Show More