Compare commits

...

97 Commits

Author SHA1 Message Date
Elijah Newren
0fd533eee1 2.20.0 release
2007-09-15  Elijah Newren  <newren gmail com>

	* configure.in:
	* NEWS:
	2.20.0 release

svn path=/trunk/; revision=3341
2007-09-16 02:58:03 +00:00
Elijah Newren
dc7e1007b0 Patch from Alexey Rusakov to prevent a crash on logout with metacity
2007-09-15  Elijah Newren  <newren gmail com>

	* src/session.c (warn_about_lame_clients_and_finish_interact):
	Patch from Alexey Rusakov to prevent a crash on logout with
	metacity subsequently not being restored in future sessions.
	Fixes #433253.

svn path=/trunk/; revision=3340
2007-09-16 02:46:32 +00:00
Takeshi AIHANA
976968e07e Translation improved.
2007-09-16  Takeshi AIHANA <takeshi.aihana@gmail.com>

        * ja.po: Translation improved.

svn path=/trunk/; revision=3339
2007-09-16 02:41:31 +00:00
Mugurel Tudor
d986898234 Updated Romanian translation
2007-09-16  Mugurel Tudor  <mugurelu@gnome.ro>

	* ro.po: Updated Romanian translation

svn path=/trunk/; revision=3338
2007-09-15 21:57:18 +00:00
Nickolay V. Shmyrev
1d8db8825f Updated Russian translation.
2007-09-15  Nickolay V. Shmyrev  <nshmyrev@yandex.ru>

	* ru.po: Updated Russian translation.


svn path=/trunk/; revision=3337
2007-09-15 21:14:32 +00:00
Stéphane Raimbault
7c377a0193 Fixed French translation by Vincent Untz and Stéphane Raimbault.
svn path=/trunk/; revision=3336
2007-09-15 15:34:41 +00:00
Andre Klapper
fe9e1cdb05 Updated Slovak translation on behalf of Peter Tuharsky
2007-09-15  Andre Klapper  <a9016009@gmx.de>

	* sk.po: Updated Slovak translation on behalf of Peter Tuharsky
        <tuharsky@misbb.sk>.


svn path=/trunk/; revision=3335
2007-09-15 14:17:23 +00:00
Clytie Siddall
d6e8c6c3ed 2007-09-14 vi.po Updated Vietnamese translation
Clytie Siddall <clytie@riverland.net.au>

svn path=/trunk/; revision=3334
2007-09-14 11:43:52 +00:00
Luca Ferretti
029e3fc0ae Updated Italian translation.
2007-09-14  Luca Ferretti  <elle.uca@libero.it>

	* it.po: Updated Italian translation.


svn path=/trunk/; revision=3333
2007-09-14 07:30:23 +00:00
Djihed Afifi
c27cdff29c Updated Arabic Translation by Khaled Hosny.
svn path=/trunk/; revision=3332
2007-09-13 22:45:34 +00:00
Gabor Kelemen
cf2da99859 Translation updated.
2007-09-14 Gabor Kelemen  <kelemeng@gnome.hu>

	* hu.po: Translation updated.


svn path=/trunk/; revision=3331
2007-09-13 22:14:07 +00:00
Amanpreet Singh Alam
3fe42e647a updating for Punjabi
svn path=/trunk/; revision=3330
2007-09-13 03:41:15 +00:00
Ihar Hrachyshka
1d06b1f5e8 Updated Belarusian Latin translation
svn path=/trunk/; revision=3329
2007-09-12 23:07:57 +00:00
Maxim Dziumanenko
20479df535 Update Ukrainian translation.
2007-09-12 Maxim Dziumanenko <dziumanenko@gmail.com>

	* Update Ukrainian translation.

svn path=/trunk/; revision=3328
2007-09-12 13:50:16 +00:00
Goran Rakic
c585fa5036 Updated Serbian translation
svn path=/trunk/; revision=3327
2007-09-12 01:33:36 +00:00
Kenneth Nielsen
1aed84c9d7 Updated Danish translation
svn path=/trunk/; revision=3326
2007-09-09 01:19:30 +00:00
Inaki Larranaga Murgoitio
8cacb2afef Fixed some typos in Basque translation.
2007-09-08  Inaki Larranaga Murgoitio  <dooteo@zundan.com>

        * eu.po: Fixed some typos in Basque translation.



svn path=/trunk/; revision=3325
2007-09-08 16:31:48 +00:00
Vladimer Sichinava
2cfd418b03 Updated Georgian translation by Vladimer Sichinava <vsichi@gnome.org>
svn path=/trunk/; revision=3324
2007-09-07 12:17:00 +00:00
Yang Zhang
e4c4d8b4d8 Updated zh_CN translation
svn path=/trunk/; revision=3323
2007-09-07 11:32:28 +00:00
Jovan Naumovski
fc74911256 2007-09-05 Jovan Naumovski <jovanna@svn.gnome.org> *mk.po: Updated Macedonian translation.
svn path=/trunk/; revision=3322
2007-09-05 12:53:56 +00:00
Clytie Siddall
3d0535569d 2007-09-03 vi.po Updated Vietnamese translation
Clytie Siddall <clytie@riverland.net.au>

svn path=/trunk/; revision=3321
2007-09-03 11:19:00 +00:00
Duarte Loreto
4dc7e6a4ed Updated Portuguese translation.
2007-09-03  Duarte Loreto <happyguy_pt@hotmail.com>

	* pt.po: Updated Portuguese translation.

svn path=/trunk/; revision=3320
2007-09-03 00:23:26 +00:00
Jovan Naumovski
e84b5bfed0 2007-09-03 Jovan Naumovski <jovanna@svn.gnome.org> *mk.po: Updated Macedonian translation.
svn path=/trunk/; revision=3319
2007-09-02 23:41:06 +00:00
Yannig MARCHEGAY
c9366989a0 Updated Occitan translation
svn path=/trunk/; revision=3318
2007-09-01 20:16:05 +00:00
Elijah Newren
eb3c38e3ad update; cvs->svn & mention GConf needed Make it match idiotic format
2007-09-01  Elijah Newren  <newren gmail com>

	* HACKING: update; cvs->svn & mention GConf needed
	* MAINTAINERS: Make it match idiotic format requirements (I love
	you Olav!)

svn path=/trunk/; revision=3317
2007-09-01 18:50:07 +00:00
Jovan Naumovski
5196fb1ec5 2007-09-01 Jovan Naumovski <jovanna@svn.gnome.org> *mk.po: Updated Macedonian translation.
svn path=/trunk/; revision=3316
2007-09-01 11:04:54 +00:00
Stéphane Raimbault
353408e30b Updated French translation.
svn path=/trunk/; revision=3315
2007-09-01 08:43:52 +00:00
Ani Peter
cc6b0e03fb Updated Malayalam (ml) Translation
svn path=/trunk/; revision=3314
2007-08-30 11:37:30 +00:00
Ani Peter
38cd0f28ef Updated Malayalam (ml) Translation
svn path=/trunk/; revision=3313
2007-08-30 11:37:20 +00:00
Felix I
3d118513c5 updated ta translation
svn path=/trunk/; revision=3312
2007-08-29 07:14:05 +00:00
Johannes Schmid
d35c086240 Updated German translation
svn path=/trunk/; revision=3311
2007-08-27 16:05:22 +00:00
Raphael Higino
27e7d0c529 Updated Brazilian Portuguese translation
svn path=/trunk/; revision=3309
2007-08-26 13:15:39 +00:00
Yannig MARCHEGAY
a9294e2906 Updated Occitan translation
svn path=/trunk/; revision=3308
2007-08-21 11:12:58 +00:00
Yannig MARCHEGAY
446cc65f5d Updated Occitan translation
svn path=/trunk/; revision=3307
2007-08-20 17:00:10 +00:00
Yannig MARCHEGAY
0a94728234 Updated Occitan translation
svn path=/trunk/; revision=3305
2007-08-17 17:58:20 +00:00
SANDRA MARAKKALA DANISHKA NAVIN
aa87fe4140 Add entry si for sinhala
svn path=/trunk/; revision=3304
2007-08-17 08:58:39 +00:00
SANDRA MARAKKALA DANISHKA NAVIN
5944e94710 si.po file for sinhala updated
svn path=/trunk/; revision=3303
2007-08-17 08:43:59 +00:00
Adam Weinberger
2b468a45b3 Updated Canadian English translation.
2007-08-15  Adam Weinberger  <adamw@gnome.org>

	* en_CA.po: Updated Canadian English translation.



svn path=/trunk/; revision=3301
2007-08-15 19:43:39 +00:00
Takeshi AIHANA
d7cff41d1b Updated Japanese translation.
2007-08-13  Takeshi AIHANA <takeshi.aihana@gmail.com>

        * ja.po: Updated Japanese translation.

svn path=/trunk/; revision=3300
2007-08-13 13:57:55 +00:00
Žygimantas Beručka
b4d0db909b Updated Lithuanian translation.
svn path=/trunk/; revision=3299
2007-08-13 07:51:28 +00:00
Daniel Nylander
b595f1e99c sv.po: Swedish translation updated
svn path=/trunk/; revision=3298
2007-08-11 10:49:35 +00:00
Felix I
ed467aad59 updated ta translation
svn path=/trunk/; revision=3297
2007-08-10 08:48:06 +00:00
Ankitkumar Rameshchandra Patel
73224faec0 Updated Translation
svn path=/trunk/; revision=3296
2007-08-10 08:37:23 +00:00
Ilkka Tuohela
bd5436097e Updated Finnish translation
svn path=/trunk/; revision=3295
2007-08-09 04:22:21 +00:00
Ankitkumar Rameshchandra Patel
a462ba5798 Updated Translation
svn path=/trunk/; revision=3294
2007-08-08 13:53:20 +00:00
Søren Sandmann
b1ff50f45f Don't maintain a passive grab on windows when raise-on-click is FALSE -
Tue Aug  7 13:26:49 2007  Søren Sandmann  <sandmann@redhat.com>

	* src/window.c (meta_window_notify_focus): Don't maintain a
	passive grab on windows when raise-on-click is FALSE - bug
	461577.



svn path=/trunk/; revision=3293
2007-08-07 17:27:09 +00:00
Thomas Thurman
5a6bbef8ac post-release bump to 2.19.89.
2007-08-07  Thomas Thurman  <thomas@thurman.org.uk>

        * configure.in: post-release bump to 2.19.89.



svn path=/trunk/; revision=3292
2007-08-07 12:50:15 +00:00
Thomas James Alexander Thurman
309e254b1d ==================================================
metacity-2.19.55 archives ready for distribution: 
metacity-2.19.55.tar.gz
==================================================


svn path=/trunk/; revision=3290
2007-08-07 12:44:05 +00:00
Jorge Gonzalez Gonzalez
10dd09687b Updated Spanish translation
svn path=/trunk/; revision=3289
2007-08-07 10:22:48 +00:00
Theppitak Karoonboonyanan
69bbbbc6ca Updated Thai translation.
* th.po: Updated Thai translation.


svn path=/trunk/; revision=3288
2007-08-07 04:51:09 +00:00
Thomas Thurman
1a6c98c79b If KEY_AUTO_RAISE_DELAY is undefined or non-integer, it is not treated as
2007-08-06  Thomas Thurman  <thomas@thurman.org.uk>

        If KEY_AUTO_RAISE_DELAY is undefined or non-integer, it is not treated
        as zero.

        * src/prefs.c (meta_prefs_init): check type of key, and behave sensibly
        if it's unexpected.
        * src/prefs.c (find_and_update_list_binding): remove old comment.


svn path=/trunk/; revision=3287
2007-08-07 01:30:28 +00:00
Ilkka Tuohela
952e883456 Updated Finnish translation
svn path=/trunk/; revision=3286
2007-08-06 13:29:36 +00:00
Inaki Laranaga Murgoitio
c652788542 Updated Basque translation.
2007-08-05  Inaki Laranaga Murgoitio  <dooteo@zundan.com>

	* eu.po: Updated Basque translation.


svn path=/trunk/; revision=3285
2007-08-05 18:50:59 +00:00
Frédéric Crozat
696ef85e64 Fix mangled window title in "Force Quit" dialog when using non-UTF8
* src/delete.c: Fix mangled window title in "Force Quit"
        dialog when using non-UTF8 locale. Close #462734.


svn path=/trunk/; revision=3284
2007-08-03 07:43:03 +00:00
Thomas Thurman
007e8c013c Move "close" to bottom of window menu; allow workspace list to appear at
2007-08-02  Thomas Thurman  <thomas@thurman.org.uk>

        Move "close" to bottom of window menu; allow workspace list to appear
        at any position in the menu. Closes #104026.

        * src/menu.c (MetaMenuItemType): added new MENU_ITEM_WORKSPACE_LIST
        item.
        * src/menu.c (menuitems): reordered "close", added a workspace list.
        * src/menu.c (menu_item_new): return null for workspace lists.
        * src/menu.c (meta_window_menu_new): handle workspace lists.


svn path=/trunk/; revision=3283
2007-08-02 13:45:46 +00:00
Thomas Thurman
cd07c25706 windows which are always on top have the "stick" menu option insensitive.
2007-06-31  Thomas Thurman  <thomas@thurman.org.uk>

        * src/window.c (meta_window_show_menu): windows which are
        always on top have the "stick" menu option insensitive. (#460997).


svn path=/trunk/; revision=3282
2007-07-31 12:20:14 +00:00
Thomas Thurman
3802f157b6 Put all bitfields together to help with optimisation. Closes #450271 (for
2007-06-23  Thomas Thurman  <thomas@thurman.org.uk>

        * src/window.h (MetaWindow): Put all bitfields together to
        help with optimisation. Closes #450271 (for real this time).


svn path=/trunk/; revision=3281
2007-07-30 13:53:25 +00:00
Yannig MARCHEGAY
a871830927 Updated Occitan translation
svn path=/trunk/; revision=3280
2007-07-29 12:54:42 +00:00
Alexander Shopov
5545e49581 Updated Bulgarian translation by Alexander Shopov <ash@contact.bg>
2007-07-25  Alexander Shopov  <ash@contact.bg>

	* bg.po: Updated Bulgarian translation by
	Alexander Shopov <ash@contact.bg>

svn path=/trunk/; revision=3279
2007-07-25 19:48:17 +00:00
Matthias Clasen
e98e38d32e Use the correct directory when installing keybindings. (#454055)
2007-07-23  Matthias Clasen  <mclasen@redhat.com>

        * configure.in:
        * src/Makefile.am: Use the correct directory when
        installing keybindings.  (#454055)


svn path=/trunk/; revision=3278
2007-07-24 02:41:33 +00:00
Thomas Thurman
2d74cdc026 post-release bump to 2.19.55.
2007-07-22  Thomas Thurman  <thomas@thurman.org.uk>

        * configure.in: post-release bump to 2.19.55.



svn path=/trunk/; revision=3277
2007-07-24 01:49:22 +00:00
Thomas James Alexander Thurman
7c343fc22d ==================================================
gnome-panel-2.3.1.tar.gz is ready for distribution
==================================================
(for real this time-- previously forgot NEWS in ChangeLog)

svn path=/trunk/; revision=3276
2007-07-24 01:37:22 +00:00
Thomas James Alexander Thurman
1dc74bbc8c 2.19.34 =======
2.19.34
=======

Thanks to Rob Bradford, Cosimo Cecchi, Yair Hershkovitz and Thomas Thurman
for improvements in this release.

 - Fix a bug where the window can be focused without being raised
   if the maximize is aborted. (Rob) [#459027]
 - Unset fullscreen is an allowed action where relevant. (Cosimo) [#449427]
 - Reverse window buttons and align them to the left for RTL locales.
   (Yair) [#92212]
 - Put all bitfields in window data together to help with optimisation.
   (Thomas) [#450271]

Translations
  Jorge Gonzalez (es), Ilkka Tyohela (fi), Gabor Kelemen (hu),
  Takeshi AIHANA (ja), Kjartan Maraas (nb), Vincent van Adrighem (nl),
  Daniel Nylander (sv), Theppitak Karoonbooyana (th),
  Nguyễn Thái Ngọc Duy (vi)


svn path=/trunk/; revision=3274
2007-07-24 00:59:54 +00:00
Rob Bradford
618a6b38c3 Fix a bug where the window can be focused without being raised if the
2007-07-22  Rob Bradford  <rob@robster.org.uk>

        Fix a bug where the window can be focused without being raised
        if the maximize is aborted. Fixes #459027.

        * src/frames.c (meta_frames_button_press_event,
        meta_frames_button_release_event): When maximising only focus
        the window once the button press is released.       



svn path=/trunk/; revision=3273
2007-07-23 01:48:17 +00:00
Cosimo Cecchi
e8b016984b Unset fullscreen is an allowed action where relevant. Fixes #449427.
2007-07-22  Cosimo Cecchi  <anarki@lilik.it>

Unset fullscreen is an allowed action where relevant. Fixes #449427.

* src/window.c (set_allowed_actions_hint): Separate FULLSCREEN action from RESIZE action.
                                                                                      

svn path=/trunk/; revision=3272
2007-07-23 00:46:03 +00:00
Yair Hershkovitz
8bbccb91f7 Reverse window buttons and align them to the left for RTL locales. (#92212)
svn path=/trunk/; revision=3271
2007-07-22 06:39:29 +00:00
Gabor Kelemen
9c2e546f53 Translation updated.
2007-07-21 Gabor Kelemen  <kelemeng@gnome.hu>

	* hu.po: Translation updated.


svn path=/trunk/; revision=3270
2007-07-21 11:05:06 +00:00
Vincent van Adrighem
12ac1d6a4b Translation updated.
2007-07-18  Vincent van Adrighem  <adrighem@gnome.org>

	* nl.po: Translation updated.

svn path=/trunk/; revision=3269
2007-07-18 13:45:57 +00:00
Daniel Nylander
2ccb7f7bfa sv.po: Updated Swedish translation
svn path=/trunk/; revision=3268
2007-07-17 12:02:36 +00:00
Ilkka Tuohela
389eb410c7 Updated Finnish translation
svn path=/trunk/; revision=3267
2007-07-16 16:10:22 +00:00
Theppitak Karoonboonyanan
f0c4d2c57b Updated Thai translation.
* th.po: Updated Thai translation.


svn path=/trunk/; revision=3266
2007-07-10 16:15:44 +00:00
Takeshi AIHANA
4c4943312a Updated Japanese translation.
2007-07-08  Takeshi AIHANA <takeshi.aihana@gmail.com>

        * ja.po: Updated Japanese translation.

svn path=/trunk/; revision=3264
2007-07-08 02:07:09 +00:00
Nguyen Thai Ngoc Duy
d616aeb828 updated vi.po
svn path=/trunk/; revision=3262
2007-07-03 00:18:03 +00:00
Clytie Siddall
92c63dfdc5 Updated Vietnamese translation.
svn path=/trunk/; revision=3260
2007-06-27 12:41:20 +00:00
Jorge Gonzalez Gonzalez
f9678266c7 Updated Spanish translation
svn path=/trunk/; revision=3259
2007-06-25 06:43:32 +00:00
Kjartan Maraas
e3db5a0be6 Add src/core.c Updated Norwegian bokmål translation.
2007-06-24  Kjartan Maraas  <kmaraas@gnome.org>

	* POTFILES.in: Add src/core.c
	* nb.po: Updated Norwegian bokmål translation.

svn path=/trunk/; revision=3258
2007-06-24 12:51:07 +00:00
Thomas Thurman
49e1802c7a Put all bitfields together to help with optimisation. Closes #450271.
2007-06-23  Thomas Thurman  <thomas@thurman.org.uk>

        * src/window.c (MetaWindow): Put all bitfields together to
        help with optimisation. Closes #450271.


svn path=/trunk/; revision=3257
2007-06-23 04:30:49 +00:00
Jorge Gonzalez Gonzalez
eb4941d005 Updated Spanish translation
svn path=/trunk/; revision=3256
2007-06-19 09:28:37 +00:00
Thomas James Alexander Thurman
371f0b732f I don't actually know what year it is most days
svn path=/trunk/; revision=3255
2007-06-18 17:32:09 +00:00
Thomas Thurman
bdd9e28878 Update copyright year because it was five years out of date.
2007-06-18  Thomas Thurman  <thomas@thurman.org.uk>

        * src/main.c (version): Update copyright year because it was
        five years out of date.


svn path=/trunk/; revision=3254
2007-06-18 17:30:28 +00:00
Thomas Thurman
1f05ddcd0e post-release bump to 2.19.34.
2007-06-18  Thomas Thurman  <thomas@thurman.org.uk>

        * configure.in: post-release bump to 2.19.34.


svn path=/trunk/; revision=3250
2007-06-18 12:10:48 +00:00
Thomas Thurman
78604b64bc 2.19.21 release.
2007-06-18  Thomas Thurman  <thomas@thurman.org.uk>

        * NEWS: 2.19.21 release.


svn path=/trunk/; revision=3248
2007-06-18 12:08:43 +00:00
Thomas Thurman
7c4af65ec1 Only open new windows on the current xinerama. Closes #145503, for now.
2007-06-18  Thomas Thurman  <thomas@thurman.org.uk>

        * src/place.c (find_first_fit, meta_window_place): Only open new
        windows on the current xinerama. Closes #145503, for now.


svn path=/trunk/; revision=3247
2007-06-18 11:46:44 +00:00
Thomas Thurman
e6083f64fb return a boolean instead a void, to show whether startup properties were
2007-06-17  Thomas Thurman  <thomas@thurman.org.uk>

        * src/screen.[ch] (meta_screen_apply_startup_properties): return a
        boolean instead a void, to show whether startup properties were
        applied. Also some commenting.
        * src/window-props.c: (reload_net_startup_id): Only activate the
        window if the startup_id was actually changed. Closes #400167.


svn path=/trunk/; revision=3245
2007-06-18 02:37:14 +00:00
Damien Carbery
b996cd03be MetaCloseEffect and MetaFocusEffect, which were empty structs, #ifdeffed
2007-06-16  Damien Carbery  <damien.carbery@sun.com>

        * effects.h: MetaCloseEffect and MetaFocusEffect, which were empty
        structs, #ifdeffed out because they broke the build on Solaris.
        Closes #397296.



svn path=/trunk/; revision=3244
2007-06-17 02:55:07 +00:00
Damien Carbery
36287b9417 make prototype of meta_window_unqueue match implementation. Closes
2007-06-16  Damien Carbery  <damien.carbery@sun.com>

        * window.h: make prototype of meta_window_unqueue match
        implementation. Closes #446535.



svn path=/trunk/; revision=3243
2007-06-17 02:15:07 +00:00
Funda Wang
6d8efc90e0 Updated metacity zh_CN translation
svn path=/trunk/; revision=3242
2007-06-16 09:40:15 +00:00
Jorge Gonzalez Gonzalez
d53af7196c Updated Spanish translation
svn path=/trunk/; revision=3241
2007-06-15 10:13:49 +00:00
Pema Geyleg
667c74bc4d updated dzongkha translation
svn path=/trunk/; revision=3240
2007-06-13 09:11:51 +00:00
Thomas Thurman
c5c59b1761 post-release bump to 2.19.21.
2007-06-10  Thomas Thurman  <thomas@thurman.org.uk>

        * configure.in: post-release bump to 2.19.21.


svn path=/trunk/; revision=3239
2007-06-11 03:39:20 +00:00
Thomas James Alexander Thurman
5fb20624c4 2.19.13 release
svn path=/trunk/; revision=3237
2007-06-11 03:22:40 +00:00
Thomas Thurman
8f2b9cb4a9 Refactor thrice-duplicated queue code in window.c. Closes #376760.
2007-06-10  Thomas Thurman  <thomas@thurman.org.uk>

        Refactor thrice-duplicated queue code in window.c. Closes #376760.

        * src/window.c (meta_window_queue, meta_window_unqueue):
        New functions.
        * src/window.[ch] (meta_window_unqueue_*, meta_window_queue_*):
        Removed functions.
        * src/window.c (meta_window_new_with_attrs, meta_window_free,
        meta_window_flush_calc_showing, queue_calc_showing_func,
        meta_window_minimize, meta_window_unminimize, meta_window_maximize,
        meta_window_make_fullscreen, meta_window_shade,
        meta_window_unshade, meta_window_move_resize_internal,
        window_stick_impl, window_unstick_impl,
        meta_window_client_message, process_property_notify): Modified to
        use new queueing functions.
        * src/window.c (idle_move_resize, idle_update_icon,
        idle_calc_showing): update to receive queue number from pointer.
        * src/window.h (MetaQueueType): new enum.
        * src/window.h (MetaWindow): *_queued replaced with is_in_queue
        bitfield.
        * src/core.c (meta_core_queue_frame_resize):
        * src/display.c (event_callback,
        meta_display_queue_retheme_all_windows): Using new queueing functions.
        * src/frame.c (meta_window_destroy_frame): Using new queueing functions.
        * src/screen.c (queue_resize, meta_screen_resize_func,
        queue_windows_showing): Using new queueing functions.
        * src/window-props.c (reload_mwm_hints, reload_wm_hints,
        reload_transient_for): Using new queueing functions.
        * src/workspace.c (meta_workspace_add_window,
        meta_workspace_remove_window, meta_workspace_queue_calc_showing,
        meta_workspace_invalidate_work_area): Using new queueing functions.


svn path=/trunk/; revision=3236
2007-06-11 01:15:33 +00:00
Thomas Thuramn
0418146249 added switch_group; closes #444879.
2007-06-09  Thomas Thuramn  <thomas@thurman.org.uk>

        * src/50-metacity-key.xml.in: added switch_group; closes #444879.


svn path=/trunk/; revision=3235
2007-06-09 21:11:57 +00:00
Elijah Newren
6e70013412 Update the raise_on_click description to try to prevent misuses, to
2007-06-08  Elijah Newren  <newren gmail com>

	* src/metacity.schemas.in:
	Update the raise_on_click description to try to prevent misuses,
	to appropriately warn users, and to stop wasting the time of
	application developers.  #445447, #389923

svn path=/trunk/; revision=3234
2007-06-08 15:28:48 +00:00
Thomas Thurman
ff33209e1f changed all tabs to spaces. Removed and replaced with meta_core_get(). New
2007-06-06  Thomas Thurman  <thomas@thurman.org.uk>

        * frames.c, core.[ch]: changed all tabs to spaces.
        * core.[ch] (meta_core_get_client_size, meta_core_window_has_frame,
        meta_core_titlebar_is_onscreen, meta_core_get_client_xwindow,
        meta_core_get_frame_flags, meta_core_get_frame_type,
        meta_core_get_mini_icon, meta_core_get_icon, meta_core_get_position,
        meta_core_get_size, meta_core_get_frame_workspace,
        meta_core_get_frame_extents, meta_core_get_screen_size): Removed
        and replaced with meta_core_get().
        * core.[ch] (meta_core_get): New function.
        * core.h (MetaCoreGetType): New enum.
        * frames.c (meta_frames_ensure_layout, meta_frames_calc_geometry,
        meta_frames_get_geometry, meta_frames_apply_shapes,
        meta_frame_titlebar_event, meta_frames_button_press_event,
        populate_cache, clip_to_screen, meta_frames_paint_to_drawable,
        meta_frames_set_window_background, get_control): Replace use of
        removed functions in ui.c with meta_core_get().

        All this should make things a little faster. Closes #377495.


svn path=/trunk/; revision=3233
2007-06-07 03:31:17 +00:00
Thomas Thurman
98791271e1 Added translators' names from 2.19.8 (sorry, folks: I forgot to save NEWS
2007-06-04  Thomas Thurman  <thomas@thurman.org.uk>                                                                                                                       
                                                                                                                                                                          
        * NEWS: Added translators' names from 2.19.8 (sorry, folks:                                                                                                       
        I forgot to save NEWS with their names in it before shipping.)  


svn path=/trunk/; revision=3232
2007-06-04 19:34:01 +00:00
Thomas James Alexander Thurman
8eac4fa3ce post-release bump to .13
svn path=/trunk/; revision=3231
2007-06-04 19:05:26 +00:00
67 changed files with 26908 additions and 20367 deletions

231
ChangeLog
View File

@@ -1,3 +1,234 @@
2007-09-15 Elijah Newren <newren gmail com>
* configure.in:
* NEWS:
2.20.0 release
2007-09-15 Elijah Newren <newren gmail com>
* src/session.c (warn_about_lame_clients_and_finish_interact):
Patch from Alexey Rusakov to prevent a crash on logout with
metacity subsequently not being restored in future sessions.
Fixes #433253.
2007-09-01 Elijah Newren <newren gmail com>
* HACKING: update; cvs->svn & mention GConf needed
* MAINTAINERS: Make it match idiotic format requirements (I love
you Olav!)
2007-08-07 Thomas Thurman <thomas@thurman.org.uk>
* configure.in: post-release bump to 2.19.89.
2007-08-07 Thomas Thurman <thomas@thurman.org.uk>
* NEWS: 2.19.55 release.
2007-08-06 Thomas Thurman <thomas@thurman.org.uk>
If KEY_AUTO_RAISE_DELAY is undefined or non-integer, it is not treated
as zero.
* src/prefs.c (meta_prefs_init): check type of key, and behave sensibly
if it's unexpected.
* src/prefs.c (find_and_update_list_binding): remove old comment.
2007-08-03 Frederic Crozat <fcrozat@mandriva.com>
* src/delete.c: Fix mangled window title in "Force Quit"
dialog when using non-UTF8 locale. Close #462734.
2007-08-02 Thomas Thurman <thomas@thurman.org.uk>
Move "close" to bottom of window menu; allow workspace list to appear
at any position in the menu. Closes #104026.
* src/menu.c (MetaMenuItemType): added new MENU_ITEM_WORKSPACE_LIST
item.
* src/menu.c (menuitems): reordered "close", added a workspace list.
* src/menu.c (menu_item_new): return null for workspace lists.
* src/menu.c (meta_window_menu_new): handle workspace lists.
2007-07-31 Thomas Thurman <thomas@thurman.org.uk>
* src/window.c (meta_window_show_menu): windows which are
always on top have the "stick" menu option insensitive. (#460997).
2007-07-23 Thomas Thurman <thomas@thurman.org.uk>
* src/window.h (MetaWindow): Put all bitfields together to
help with optimisation. Closes #450271 (for real this time).
2007-07-23 Matthias Clasen <mclasen@redhat.com>
* configure.in:
* src/Makefile.am: Use the correct directory when
installing keybindings. (#454055)
2007-07-22 Thomas Thurman <thomas@thurman.org.uk>
* configure.in: post-release bump to 2.19.55.
2007-07-22 Thomas Thurman <thomas@thurman.org.uk>
* NEWS: 2.19.34 release.
2007-07-22 Rob Bradford <rob@robster.org.uk>
Fix a bug where the window can be focused without being raised
if the maximize is aborted. Fixes #459027.
* src/frames.c (meta_frames_button_press_event,
meta_frames_button_release_event): When maximising only focus
the window once the button press is released.
2007-07-22 Cosimo Cecchi <anarki@lilik.it>
Unset fullscreen is an allowed action where relevant. Fixes #449427.
* src/window.c (set_allowed_actions_hint): Separate FULLSCREEN action
from RESIZE action.
2007-07-22 Yair Hershkovitz <yairhr@gmail.com>
Reverse window buttons and align them to the left for RTL locales.
Fixed #92212.
* src/prefs.c (button_layout, init_button_layout, update_button_layout):
Support reversing and left-aligning of buttons for both Gconf and
NO-Gconf modes.
* src/main.c (main): Call meta_ui_init() before meta_prefs_init().
meta_prefs_init() check for RTL locales which is initialized in
meta_ui_init().
* src/theme.c (meta_frame_layout_calc_geometry): Fixed access to
button_layout to stop iterating when getting to a
META_BUTTON_FUNCTION_LAST value.
2007-06-23 Thomas Thurman <thomas@thurman.org.uk>
* src/window.c (MetaWindow): Put all bitfields together to
help with optimisation. Closes #450271.
2007-06-18 Thomas Thurman <thomas@thurman.org.uk>
* src/main.c (version): Update copyright year because it was
five years out of date.
2007-06-18 Thomas Thurman <thomas@thurman.org.uk>
* configure.in: post-release bump to 2.19.34.
2007-06-18 Thomas Thurman <thomas@thurman.org.uk>
* NEWS: 2.19.21 release.
2007-06-18 Thomas Thurman <thomas@thurman.org.uk>
* src/place.c (find_first_fit, meta_window_place): Only open new
windows on the current xinerama. Closes #145503, for now.
2007-06-17 Thomas Thurman <thomas@thurman.org.uk>
* src/screen.[ch] (meta_screen_apply_startup_properties): return a
boolean instead a void, to show whether startup properties were
applied. Also some commenting.
* src/window-props.c: (reload_net_startup_id): Only activate the
window if the startup_id was actually changed. Closes #400167.
2007-06-16 Damien Carbery <damien.carbery@sun.com>
* effects.h: MetaCloseEffect and MetaFocusEffect, which were empty
structs, #ifdeffed out because they broke the build on Solaris.
Closes #397296.
2007-06-16 Damien Carbery <damien.carbery@sun.com>
* window.h: make prototype of meta_window_unqueue match
implementation. Closes #446535.
2007-06-10 Thomas Thurman <thomas@thurman.org.uk>
* configure.in: post-release bump to 2.19.21.
2007-06-10 Thomas Thurman <thomas@thurman.org.uk>
* NEWS: 2.19.13 release.
2007-06-10 Thomas Thurman <thomas@thurman.org.uk>
Refactor thrice-duplicated queue code in window.c. Closes #376760.
* src/window.c (meta_window_queue, meta_window_unqueue):
New functiortl.patchns.
* src/window.[ch] (meta_window_unqueue_*, meta_window_queue_*):
Removed functions.
* src/window.c (meta_window_new_with_attrs, meta_window_free,
meta_window_flush_calc_showing, queue_calc_showing_func,
meta_window_minimize, meta_window_unminimize, meta_window_maximize,
meta_window_make_fullscreen, meta_window_shade,
meta_window_unshade, meta_window_move_resize_internal,
window_stick_impl, window_unstick_impl,
meta_window_client_message, process_property_notify): Modified to
use new queueing functions.
* src/window.c (idle_move_resize, idle_update_icon,
idle_calc_showing): update to receive queue number from pointer.
* src/window.h (MetaQueueType): new enum.
* src/window.h (MetaWindow): *_queued replaced with is_in_queue
bitfield.
* src/core.c (meta_core_queue_frame_resize):
* src/display.c (event_callback,
meta_display_queue_retheme_all_windows): Using new queueing functions.
* src/frame.c (meta_window_destroy_frame): Using new queueing functions.
* src/screen.c (queue_resize, meta_screen_resize_func,
queue_windows_showing): Using new queueing functions.
* src/window-props.c (reload_mwm_hints, reload_wm_hints,
reload_transient_for): Using new queueing functions.
* src/workspace.c (meta_workspace_add_window,
meta_workspace_remove_window, meta_workspace_queue_calc_showing,
meta_workspace_invalidate_work_area): Using new queueing functions.
2007-06-09 Thomas Thurman <thomas@thurman.org.uk>
* src/50-metacity-key.xml.in: added switch_group; closes #444879.
2007-06-08 Elijah Newren <newren gmail com>
* src/metacity.schemas.in:
Update the raise_on_click description to try to prevent misuses,
to appropriately warn users, and to stop wasting the time of
application developers. #445447, #389923
2007-06-06 Thomas Thurman <thomas@thurman.org.uk>
* frames.c, core.[ch]: changed all tabs to spaces.
* core.[ch] (meta_core_get_client_size, meta_core_window_has_frame,
meta_core_titlebar_is_onscreen, meta_core_get_client_xwindow,
meta_core_get_frame_flags, meta_core_get_frame_type,
meta_core_get_mini_icon, meta_core_get_icon, meta_core_get_position,
meta_core_get_size, meta_core_get_frame_workspace,
meta_core_get_frame_extents, meta_core_get_screen_size): Removed
and replaced with meta_core_get().
* core.[ch] (meta_core_get): New function.
* core.h (MetaCoreGetType): New enum.
* frames.c (meta_frames_ensure_layout, meta_frames_calc_geometry,
meta_frames_get_geometry, meta_frames_apply_shapes,
meta_frame_titlebar_event, meta_frames_button_press_event,
populate_cache, clip_to_screen, meta_frames_paint_to_drawable,
meta_frames_set_window_background, get_control): Replace use of
removed functions in ui.c with meta_core_get().
All this should make things a little faster. Closes #377495.
2007-06-04 Thomas Thurman <thomas@thurman.org.uk>
* NEWS: Added translators' names from 2.19.8 (sorry, folks:
I forgot to save NEWS with their names in it before shipping.)
2007-06-04 Thomas Thurman <thomas@thurman.org.uk>
* configure.in: post-release bump to 2.19.13.
2007-06-04 Thomas Thurman <thomas@thurman.org.uk>
* NEWS: 2.19.8 release.

21
HACKING
View File

@@ -42,18 +42,17 @@ Minimal Building/Testing Environment
build a development version of Metacity -- odds are, you may be able
to build metacity from CVS without building any other modules.
As long as you have gtk+ >= 2.10 with your distro (gtk+ >= 2.6 if
you manually revert the change from bug 348633), you should be able
to install your distro's development packages (e.g. gtk2-devel,
GConf2-devel, startup-notification-devel on Fedora; also, remember
to install the gnome-common package which is needed for building cvs
versions of Gnome modules like Metacity) as well as the standard
development tools (gcc, autoconf, automake, pkg-config, intltool,
and libtool) and be ready to build and test Metacity. Steps to do
so:
As long as you have gtk+ >= 2.10 and GConf with your distro (gtk+ >=
2.6 if you manually revert the change from bug 348633), you should
be able to install your distro's development packages
(e.g. gtk2-devel, GConf2-devel, startup-notification-devel on
Fedora; also, remember to install the gnome-common package which is
needed for building cvs versions of Gnome modules like Metacity) as
well as the standard development tools (gcc, autoconf, automake,
pkg-config, intltool, and libtool) and be ready to build and test
Metacity. Steps to do so:
$ cvs -q -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome \
checkout metacity
$ svn checkout http://svn.gnome.org/svn/metacity/trunk metacity
$ cd metacity
$ ./autogen.sh --prefix /usr
$ make

View File

@@ -1,13 +1,17 @@
Currently active maintainers
--------------------------------
Elijah Newren (newren gmail com)
Elijah Newren
Email: newren gmail com
Userid: newren
- Usually won't touch the theme bugs (isn't interested) or the
compositor (until open source nvidia drivers are up to snuff).
Tends to be most interested in libwnck/gtk interactions, focus
issues, constraints problems, and raising/stacking, but works on
just about anything other than themes and the compositor.
Thomas Thurman (thomas thurman org uk)
Thomas Thurman
Email: thomas thurman org uk
Userid: tthurman
- Responsible for all theme bugs and the compositor (thank goodness
Thomas got involved, eh?). I'm sure he'll replace this sentence
with his interests when he reads it. ;-)
@@ -15,7 +19,9 @@ Thomas Thurman (thomas thurman org uk)
Semi-active maintainers
--------------------------------
Havoc Pennington (hp redhat com)
Havoc Pennington
Email: hp redhat com
Userid: hp
- Original author. Doesn't patch metacity anymore, but is active in
answering questions, responding to bugs, providing very helpful
suggestions and insight, and even assisting with debugging.

92
NEWS
View File

@@ -1,3 +1,88 @@
2.20.0
======
Thanks to Alexey Rusakov for the fix in this release.
- prevent a crash on logout with metacity subsequently not being
restored in future sessions (Alexey) [#433253]
Translations
Khaled Hosny (ar), Ihar Hrachyshka (be@latin), Ask Hjorth Larsen (da),
Adam Weinberger (en_CA), Iñaki Larrañaga Murgoitio (eu), Ilkka
Tuohela (fi), Vincent Untz (fr), Ankit Patel (gu), Gabor Kelemen (hu),
Luca Ferretti (it), Takeshi AIHANA (ja), Žygimantas Beručka (lt), Jovan
Naumovski (mk), Ani Peter (ml), Og Maciel (pt_BR), Duarte Loreto (pt),
Mugurel Tudor (ro), Nickolay V. Shmyrev (ru), Peter Tuhársky (sk), Горан
Ракић (sr), Daniel Nylander (sv), Dr.T.Vasudevan (ta), Maxim
Dziumanenko (uk), Clytie Siddall (vi)
2.19.55
=======
Thanks to Frederic Crozat, Matthias Clasen, and Thomas Thurman for improvements
in this release.
- Noninteger auto-raise delay is not assumed to be zero (Thomas) (#377491)
- Fix mangled window title in "Force Quit" (Frederic) (#462734)
- "Close" can appear at any point in the window menu, and now appears
at the bottom (Thomas) (#104026)
- Windows which are always on top have "stick" insensitive (Thomas) (#460997)
- All bitfields in window structure are together for optimisation (Thomas)
(#450271)
- Use the correct directory when installing keybindings (Matthias) (#454055)
Translations
Alexander Shopov (bg), Jorge González (es), Iñaki Larrañaga Murgoitio (eu),
Ilkka Tuohela (fi), Theppitak Karoonboonyanan (th)
2.19.34
=======
Thanks to Rob Bradford, Cosimo Cecchi, Yair Hershkovitz and Thomas Thurman
for improvements in this release.
- Fix a bug where the window can be focused without being raised
if the maximize is aborted. (Rob) [#459027]
- Unset fullscreen is an allowed action where relevant. (Cosimo) [#449427]
- Reverse window buttons and align them to the left for RTL locales.
(Yair) [#92212]
- Put all bitfields in window data together to help with optimisation.
(Thomas) [#450271]
Translations
Jorge Gonzalez (es), Ilkka Tyohela (fi), Gabor Kelemen (hu),
Takeshi AIHANA (ja), Kjartan Maraas (nb), Vincent van Adrighem (nl),
Daniel Nylander (sv), Theppitak Karoonbooyana (th),
Nguyễn Thái Ngọc Duy (vi)
2.19.21
=======
Thanks to Damien Carbery and Thomas Thurman for improvements in
this release.
- Fixed build on Solaris (Damien) [#397296, #446535]
- Only activate windows which change their startup ID if the
new ID differs from the old. (This fixes the bug where KDE
apps gained the attention hint when switching workspaces.)
(Thomas) [#400167]
- Open new windows on the current xinerama. (Thomas) [#145503].
Translations
Tshewang Norbu (dz), Jorge González (es), Funda Wang (zh_CN)
2.19.13
=======
Thanks to Elijah Newren and Thomas Thurman for improvements in
this release.
- Updated the description of raise_on_click (Elijah) [#445447,
#389923]
- Refactor queueing code in window.c (Thomas) [#376760]
- Added switch_group to the keybindings file (Thomas) [#444879]
- New window information accessor function (Thomas) [#377495]
2.19.8
======
@@ -12,6 +97,13 @@ improvements in this release.
[#433400]
- Fix window menu layout for RTL scripts (Thomas) [#433400]
Translations
Khaled Hosny (ar), Ihar Hrachyshka (be@latin), Jovan Naumovski (mk),
Theppitak Karoonboonyanan (th)
[ Apologies to these translators who didn't get credited in the
version of 2.19.8 that shipped. ]
2.19.5
======

View File

@@ -1,10 +1,10 @@
AC_PREREQ(2.50)
m4_define([metacity_major_version], [2])
m4_define([metacity_minor_version], [19])
m4_define([metacity_minor_version], [20])
# Fibonacci sequence for micro version numbering:
# 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987
m4_define([metacity_micro_version], [8])
m4_define([metacity_micro_version], [0])
m4_define([metacity_version],
[metacity_major_version.metacity_minor_version.metacity_micro_version])
@@ -176,6 +176,13 @@ else
AC_MSG_ERROR("Pango 1.2.0 or greater based on Xft2 is required")
fi
if $PKG_CONFIG --exists gnome-keybindings; then
GNOME_KEYBINDINGS_KEYSDIR=$($PKG_CONFIG --variable keysdir gnome-keybindings)
else
GNOME_KEYBINDINGS_KEYSDIR="${datadir}/gnome-control-center/keybindings"
fi
AC_SUBST(GNOME_KEYBINDINGS_KEYSDIR)
STARTUP_NOTIFICATION_VERSION=0.7
AC_MSG_CHECKING([Startup notification library >= $STARTUP_NOTIFICATION_VERSION])
if $PKG_CONFIG --atleast-version $STARTUP_NOTIFICATION_VERSION libstartup-notification-1.0; then

View File

@@ -1,3 +1,208 @@
2007-09-16 Takeshi AIHANA <takeshi.aihana@gmail.com>
* ja.po: Translation improved.
2007-09-16 Mugurel Tudor <mugurelu@gnome.ro>
* ro.po: Updated Romanian translation
2007-09-15 Nickolay V. Shmyrev <nshmyrev@yandex.ru>
* ru.po: Updated Russian translation.
2007-09-15 Stéphane Raimbault <stephane.raimbault@gmail.com>
* fr.po: Fixed French translation by Vincent Untz and Stéphane
Raimbault.
2007-09-15 Andre Klapper <a9016009@gmx.de>
* sk.po: Updated Slovak translation on behalf of Peter Tuharsky
<tuharsky@misbb.sk>.
2007-09-14 Clytie Siddall <clytie@riverland.net.au>
* vi.po: Updated Vietnamese translation.
2007-09-14 Luca Ferretti <elle.uca@libero.it>
* it.po: Updated Italian translation.
2007-09-13 Djihed Afifi <djihed@gmail.com>
* ar.po: Updated Arabic Translation by Khaled Hosny.
2007-09-14 Gabor Kelemen <kelemeng@gnome.hu>
* hu.po: Translation updated.
2007-09-13 Ihar Hrachyshka <ihar.hrachyshka@gmail.com>
* be@latin.po: Updated Belarusian Latin translation.
2007-09-12 Maxim Dziumanenko <dziumanenko@gmail.com>
* uk.po: Update Ukrainian translation.
2007-09-12 Goran Rakić <grakic@devbase.net>
* sr.po, sr@Latn.po: Updated Serbian translation.
2007-09-09 Kenneth Nielsen <k.nielsen81@gmail.com>
* da.po: Updated Danish translation
2007-09-08 Inaki Larranaga Murgoitio <dooteo@zundan.com>
* eu.po: Fixed some typos in Basque translation.
2007-09-05 Jovan Naumovski <jovan@lugola.net>
* mk.po: Updated Macedonian translation.
2007-09-03 Clytie Siddall <clytie@riverland.net.au>
* vi.po: Updated Vietnamese translation.
2007-09-03 Duarte Loreto <happyguy_pt@hotmail.com>
* pt.po: Updated Portuguese translation.
2007-09-03 Jovan Naumovski <jovan@lugola.net>
* mk.po: Updated Macedonian translation.
2007-09-01 Jovan Naumovski <jovan@lugola.net>
* mk.po: Updated Macedonian translation.
2007-09-01 Stéphane Raimbault <stephane.raimbault@gmail.com>
* fr.po: Updated French translation.
2007-08-30 Ani Peter <peter.ani@gmail.com>
* ml.po: Updated Malayalam Translation
2007-08-29 I. Felix <ifelix@svn.gnome.org>
* ta.po: Tamil Translation updated by Tirumurthi Vasudevan
2007-08-26 Raphael Higino <raphaelh@svn.gnome.org>
* pt_BR.po: Updated Brazilian Portuguese translation
by Og Maciel <ogmaciel@ubuntu.com>.
2007-08-15 Adam Weinberger <adamw@gnome.org>
* en_CA.po: Updated Canadian English translation.
2007-08-13 Takeshi AIHANA <takeshi.aihana@gmail.com>
* ja.po: Updated Japanese translation.
2007-08-13 Žygimantas Beručka <zygis@gnome.org>
* lt.po: Updated Lithuanian translation.
2007-08-11 Daniel Nylander <po@danielnylander.se>
* sv.po: Updated Swedish translation.
2007-08-10 I. Felix <ifelix@svn.gnome.org>
* ta.po: Tamil Translation updated by Tirumurthi Vasudevan
2007-08-10 Ankit Patel <ankit644@yahoo.com>
* gu.po: Updated Gujarati Translation.
2007-08-09 Ilkka Tuohela <hile@iki.fi>
* fi.po: Updated Finnish translation.
2007-08-08 Ankit Patel <ankit644@yahoo.com>
* gu.po: Updated Gujarati Translation.
2007-08-07 Jorge Gonzalez <jorgegonz@svn.gnome.org>
* es.po: Updated Spanish translation
2007-08-07 Theppitak Karoonboonyanan <thep@linux.thai.net>
* th.po: Updated Thai translation.
2007-08-06 Ilkka Tuohela <hile@iki.fi>
* fi.po: Updated Finnish translation.
2007-08-05 Inaki Laranaga Murgoitio <dooteo@zundan.com>
* eu.po: Updated Basque translation.
2007-07-25 Alexander Shopov <ash@contact.bg>
* bg.po: Updated Bulgarian translation by
Alexander Shopov <ash@contact.bg>
2007-07-21 Gabor Kelemen <kelemeng@gnome.hu>
* hu.po: Translation updated.
2007-07-18 Vincent van Adrighem <adrighem@gnome.org>
* nl.po: Translation updated.
2007-07-17 Daniel Nylander <po@danielnylander.se>
* sv.po: Updated Swedish translation.
2007-07-16 Ilkka Tuohela <hile@iki.fi>
* fi.po: Updated Finnish translation.
2007-07-10 Theppitak Karoonboonyanan <thep@linux.thai.net>
* th.po: Updated Thai translation.
2007-07-08 Takeshi AIHANA <takeshi.aihana@gmail.com>
* ja.po: Updated Japanese translation.
2007-07-02 Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
* vi.po: Updated Vietnamese translation.
2007-06-27 Clytie Siddall <clytie@riverland.net.au>
* vi.po: Updated Vietnamese translation.
2007-06-25 Jorge Gonzalez <jorgegonz@svn.gnome.org>
* es.po: Updated Spanish translation
2007-06-24 Kjartan Maraas <kmaraas@gnome.org>
* POTFILES.in: Add src/core.c
* nb.po: Updated Norwegian bokmål translation.
2007-06-19 Jorge Gonzalez <jorgegonz@svn.gnome.org>
* es.po: Updated Spanish translation
2007-06-16 Funda Wang <fundawang@gmail.com>
* zh_CN.po: Updated Simplified Chinese translation
2007-06-15 Jorge Gonzalez <jorgegonz@svn.gnome.org>
* es.po: Updated Spanish translation
2007-06-13 Pema Geyleg <pema.geyleg@gmail.com>
* dz.po: Updated dzongkha translation
2007-05-18 Theppitak Karoonboonyanan <thep@linux.thai.net>
* th.po: Updated Thai translation.

View File

@@ -60,6 +60,7 @@ pt_BR
ro
ru
rw
si
sk
sl
sq

View File

@@ -3,6 +3,7 @@
src/50-metacity-desktop-key.xml.in
src/50-metacity-key.xml.in
src/tools/metacity-message.c
src/core.c
src/delete.c
src/display.c
src/errors.c

466
po/ar.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

766
po/bg.po

File diff suppressed because it is too large Load Diff

420
po/da.po

File diff suppressed because it is too large Load Diff

874
po/de.po

File diff suppressed because it is too large Load Diff

592
po/dz.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

442
po/es.po

File diff suppressed because it is too large Load Diff

1558
po/eu.po

File diff suppressed because it is too large Load Diff

845
po/fi.po

File diff suppressed because it is too large Load Diff

1527
po/fr.po

File diff suppressed because it is too large Load Diff

1396
po/gu.po

File diff suppressed because it is too large Load Diff

774
po/hu.po

File diff suppressed because it is too large Load Diff

1017
po/it.po

File diff suppressed because it is too large Load Diff

913
po/ja.po

File diff suppressed because it is too large Load Diff

1633
po/ka.po

File diff suppressed because it is too large Load Diff

1469
po/lt.po

File diff suppressed because it is too large Load Diff

427
po/mk.po

File diff suppressed because it is too large Load Diff

1523
po/ml.po

File diff suppressed because it is too large Load Diff

320
po/nb.po
View File

@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: metacity 2.15.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-04-10 01:42+0200\n"
"PO-Revision-Date: 2007-04-10 01:43+0200\n"
"POT-Creation-Date: 2007-06-24 14:47+0200\n"
"PO-Revision-Date: 2007-06-24 14:48+0200\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian (bokmål) <i18n-no@lister.ping.uio.no>\n"
"MIME-Version: 1.0\n"
@@ -31,6 +31,11 @@ msgstr " Bruk: %s\n"
msgid "Metacity was compiled without support for verbose mode\n"
msgstr "Metacity er kompilert uten støtte for «verbose» modus\n"
#: ../src/core.c:206
#, c-format
msgid "Unknown window information request: %d"
msgstr "Ukjent forespørsel om vindusinformasjon: %d"
#: ../src/delete.c:67 ../src/delete.c:94 ../src/metacity-dialog.c:50
#: ../src/theme-parser.c:484
#, c-format
@@ -66,7 +71,7 @@ msgstr ""
msgid "Failed to get hostname: %s\n"
msgstr "Feil under henting av vertsnavn: %s\n"
#: ../src/display.c:347
#: ../src/display.c:349
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Feil under åpning av X Window System skjerm «%s»\n"
@@ -87,47 +92,47 @@ msgstr ""
msgid "Fatal IO error %d (%s) on display '%s'.\n"
msgstr "Fatal IU-feil %d (%s) på skjerm «%s».\n"
#: ../src/frames.c:1066
#: ../src/frames.c:1078
msgid "Close Window"
msgstr "Lukk vindu"
#: ../src/frames.c:1069
#: ../src/frames.c:1081
msgid "Window Menu"
msgstr "Vindumeny"
#: ../src/frames.c:1072
#: ../src/frames.c:1084
msgid "Minimize Window"
msgstr "Minimer vindu"
#: ../src/frames.c:1075
#: ../src/frames.c:1087
msgid "Maximize Window"
msgstr "Maksimer vindu"
#: ../src/frames.c:1078
#: ../src/frames.c:1090
msgid "Unmaximize Window"
msgstr "Gjenopprett vindu"
#: ../src/frames.c:1081
#: ../src/frames.c:1093
msgid "Roll Up Window"
msgstr "Rull opp vindu"
#: ../src/frames.c:1084
#: ../src/frames.c:1096
msgid "Unroll Window"
msgstr "Rull ned vindu"
#: ../src/frames.c:1087
#: ../src/frames.c:1099
msgid "Keep Window On Top"
msgstr "Plasser vindu i forgrunnen"
#: ../src/frames.c:1090
#: ../src/frames.c:1102
msgid "Remove Window From Top"
msgstr "Fjern vindu fra forgrunnen"
#: ../src/frames.c:1093
#: ../src/frames.c:1105
msgid "Always On Visible Workspace"
msgstr "Alltid på synlig arbeidsområde"
#: ../src/frames.c:1096
#: ../src/frames.c:1108
msgid "Put Window On Only One Workspace"
msgstr "Plasser vindu kun på ett arbeidsområde"
@@ -152,7 +157,7 @@ msgstr ""
msgid "No command %d has been defined.\n"
msgstr "Ingen kommando %d er definert\n"
#: ../src/keybindings.c:3846
#: ../src/keybindings.c:3849
msgid "No terminal command has been defined.\n"
msgstr "Ingen terminalkommando er definert\n"
@@ -160,13 +165,13 @@ msgstr "Ingen terminalkommando er definert\n"
#, c-format
msgid ""
"metacity %s\n"
"Copyright (C) 2001-2002 Havoc Pennington, Red Hat, Inc., and others\n"
"Copyright (C) 2001-2007 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"
msgstr ""
"metacity %s\n"
"Opphavsrett © 2001-2002 Havoc Pennington, Red Hat, Inc, og andre\n"
"Opphavsrett © 2001-2007 Havoc Pennington, Red Hat, Inc, og andre\n"
"Dette er fri programvare; se i kildekoden for kopibetingelser.\n"
"Det gis INGEN garanti.\n"
@@ -213,102 +218,102 @@ msgid "Failed to restart: %s\n"
msgstr "Feil under omstart: %s\n"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:68
#: ../src/menu.c:69
msgid "Mi_nimize"
msgstr "Mi_nimer"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:70
#: ../src/menu.c:71
msgid "Ma_ximize"
msgstr "Ma_ksimer"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:72
#: ../src/menu.c:73
msgid "Unma_ximize"
msgstr "G_jenopprett"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:74
#: ../src/menu.c:75
msgid "Roll _Up"
msgstr "Rull _opp"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:76
#: ../src/menu.c:77
msgid "_Unroll"
msgstr "R_ull ned"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:78
#: ../src/menu.c:79
msgid "_Move"
msgstr "_Flytt"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:80
#: ../src/menu.c:81
msgid "_Resize"
msgstr "End_re størrelse"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:82
#: ../src/menu.c:83
msgid "Move Titlebar On_screen"
msgstr "Flytt tittellinje på _skjermen"
#. separator
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:85
#: ../src/menu.c:86
msgid "_Close"
msgstr "_Lukk"
#. separator
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:88
#: ../src/menu.c:89 ../src/menu.c:91
msgid "Always on _Top"
msgstr "All_tid øverst"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:90
#: ../src/menu.c:93
msgid "_Always on Visible Workspace"
msgstr "_Alltid på synlig arbeidsområde"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:92
#: ../src/menu.c:95
msgid "_Only on This Workspace"
msgstr "K_un på dette arbeidsområdet"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:94
#: ../src/menu.c:97
msgid "Move to Workspace _Left"
msgstr "Flytt til arbeidsområdet ti_l venstre"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:96
#: ../src/menu.c:99
msgid "Move to Workspace R_ight"
msgstr "Flytt til a_rbeidsområdet til høyre"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:98
#: ../src/menu.c:101
msgid "Move to Workspace _Up"
msgstr "Flytt til arbeidsområdet _over"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:100
#: ../src/menu.c:103
msgid "Move to Workspace _Down"
msgstr "Flytt til arbeidsområdet ne_denfor"
#: ../src/menu.c:191 ../src/prefs.c:2202 ../src/prefs.c:2737
#: ../src/menu.c:197 ../src/prefs.c:2238 ../src/prefs.c:2773
#, c-format
msgid "Workspace %d"
msgstr "Arbeidsområde %d"
#: ../src/menu.c:200
#: ../src/menu.c:206
msgid "Workspace 1_0"
msgstr "Arbeidsområde 1_0"
#: ../src/menu.c:202
#: ../src/menu.c:208
#, c-format
msgid "Workspace %s%d"
msgstr "Arbeidsområde %s%d"
#: ../src/menu.c:407
#: ../src/menu.c:411
msgid "Move to Another _Workspace"
msgstr "Flytt til et annet ar_beidsområde"
@@ -626,202 +631,183 @@ msgid "Lower window below other windows"
msgstr "Senk vinduet under andre vinduer"
#: ../src/metacity.schemas.in.h:28
msgid ""
"Many actions (e.g. clicking in the client area, moving or resizing the "
"window) normally raise the window as a side-effect. Set this option to false "
"to decouple raising from other user actions. Even when this option is false, "
"windows can still be raised by an alt-left-click anywhere on the window, a "
"normal click on the window decorations, or by special messages, such as "
"activation requests from pagers. This option is currently disabled in click-"
"to-focus mode."
msgstr ""
"Mange handlinger (f.eks klikk i klientområdet, flytting av eller endring av "
"størrelse på vinduer) hever normalt sett vinduet som en sideeffekt. Sett "
"dette alternativet til «false» for å fjerne koblingen mellom heving av "
"vinduer og andre handlinger. Når denne er satt til «false» kan vinduer "
"fremdeles heves av alt-venstreklikk hvor som helst på vinduet eller et "
"normalt klikk på vindudekorasjonene eller spesielle meldinger slik som "
"aktiveringsforespørsler fra skrivebordshåndterere. Dette alternativet er "
"deaktivert i klikk-for-fokus modus."
#: ../src/metacity.schemas.in.h:29
msgid "Maximize window"
msgstr "Maksimer vindu"
#: ../src/metacity.schemas.in.h:30
#: ../src/metacity.schemas.in.h:29
msgid "Maximize window horizontally"
msgstr "Maksimer vinduet horisontalt"
#: ../src/metacity.schemas.in.h:31
#: ../src/metacity.schemas.in.h:30
msgid "Maximize window vertically"
msgstr "Maksimer vinduet vertikalt"
#: ../src/metacity.schemas.in.h:32
#: ../src/metacity.schemas.in.h:31
msgid "Minimize window"
msgstr "Minimer vindu"
#: ../src/metacity.schemas.in.h:33
#: ../src/metacity.schemas.in.h:32
msgid "Modifier to use for modified window click actions"
msgstr ""
"Endringstast som skal brukes for modifiserte handlinger ved klikk i vinduet"
#: ../src/metacity.schemas.in.h:34
#: ../src/metacity.schemas.in.h:33
msgid "Move backward between panels and the desktop immediately"
msgstr "Bla bakover gjennom paneler og skrivebordet med en gang"
#: ../src/metacity.schemas.in.h:35
#: ../src/metacity.schemas.in.h:34
msgid "Move backwards between panels and the desktop with popup"
msgstr "Bla bakover gjennom paneler og skrivebordet med bruk av dialog"
#: ../src/metacity.schemas.in.h:36
#: ../src/metacity.schemas.in.h:35
msgid "Move backwards between windows immediately"
msgstr "Bla bakover gjennom vinduer med en gang"
#: ../src/metacity.schemas.in.h:37
#: ../src/metacity.schemas.in.h:36
msgid "Move backwards between windows of an application immediately"
msgstr "Bla bakover gjennom et programs vinduer med en gang"
#: ../src/metacity.schemas.in.h:38
#: ../src/metacity.schemas.in.h:37
msgid "Move backwards between windows of an application with popup"
msgstr "Bla bakover gjennom vinduer fra et program med oppsprettvindu"
#: ../src/metacity.schemas.in.h:39
#: ../src/metacity.schemas.in.h:38
msgid "Move between panels and the desktop immediately"
msgstr "Bla gjennom paneler og skrivebordet med en gang"
#: ../src/metacity.schemas.in.h:40
#: ../src/metacity.schemas.in.h:39
msgid "Move between panels and the desktop with popup"
msgstr "Bla gjennom paneler og skrivebordet med oppsprettvindu"
#: ../src/metacity.schemas.in.h:41
#: ../src/metacity.schemas.in.h:40
msgid "Move between windows immediately"
msgstr "Flytt fokus mellom vinduer med en gang"
#: ../src/metacity.schemas.in.h:42
#: ../src/metacity.schemas.in.h:41
msgid "Move between windows of an application immediately"
msgstr "Bla gjennom et programs vinduer med en gang"
#: ../src/metacity.schemas.in.h:43
#: ../src/metacity.schemas.in.h:42
msgid "Move between windows of an application with popup"
msgstr "Bla gjennom et programs vinduer med oppsprettvindu"
#: ../src/metacity.schemas.in.h:44
#: ../src/metacity.schemas.in.h:43
msgid "Move between windows with popup"
msgstr "Flytt mellom vinduer med dialog"
#: ../src/metacity.schemas.in.h:45
#: ../src/metacity.schemas.in.h:44
msgid "Move focus backwards between windows using popup display"
msgstr "Bytt fokus baklengs mellom vinduer med dialog"
#: ../src/metacity.schemas.in.h:46
#: ../src/metacity.schemas.in.h:45
msgid "Move window"
msgstr "Flytt vindu"
#: ../src/metacity.schemas.in.h:47
#: ../src/metacity.schemas.in.h:46
msgid "Move window one workspace down"
msgstr "Flytt vindu ett arbeidsområde ned"
#: ../src/metacity.schemas.in.h:48
#: ../src/metacity.schemas.in.h:47
msgid "Move window one workspace to the left"
msgstr "Flytt vindu et arbeidsområde til venstre"
#: ../src/metacity.schemas.in.h:49
#: ../src/metacity.schemas.in.h:48
msgid "Move window one workspace to the right"
msgstr "Flytt vindu ett arbeidsområde til høyre"
#: ../src/metacity.schemas.in.h:50
#: ../src/metacity.schemas.in.h:49
msgid "Move window one workspace up"
msgstr "Flytt vindu ett arbeidsområde opp"
#: ../src/metacity.schemas.in.h:51
#: ../src/metacity.schemas.in.h:50
msgid "Move window to east side of screen"
msgstr "Flytt vindu til østsiden av skjermen"
#: ../src/metacity.schemas.in.h:52
#: ../src/metacity.schemas.in.h:51
msgid "Move window to north side of screen"
msgstr "Flytt vindu til nordsiden av skjermen"
#: ../src/metacity.schemas.in.h:53
#: ../src/metacity.schemas.in.h:52
msgid "Move window to north-east corner"
msgstr "Flytt vindu til nord-østlig hjørne"
#: ../src/metacity.schemas.in.h:54
#: ../src/metacity.schemas.in.h:53
msgid "Move window to north-west corner"
msgstr "Flytt vindu til nord-vestlig hjørne"
#: ../src/metacity.schemas.in.h:55
#: ../src/metacity.schemas.in.h:54
msgid "Move window to south side of screen"
msgstr "Flytt vindu til sydsiden av skjermen"
#: ../src/metacity.schemas.in.h:56
#: ../src/metacity.schemas.in.h:55
msgid "Move window to south-east corner"
msgstr "Flytt vindu til syd-østlig hjørne"
#: ../src/metacity.schemas.in.h:57
#: ../src/metacity.schemas.in.h:56
msgid "Move window to south-west corner"
msgstr "Flytt vindu til syd-østlig hjørne"
#: ../src/metacity.schemas.in.h:58
#: ../src/metacity.schemas.in.h:57
msgid "Move window to west side of screen"
msgstr "Flytt vindu til vestsiden av skjermen"
#: ../src/metacity.schemas.in.h:59
#: ../src/metacity.schemas.in.h:58
msgid "Move window to workspace 1"
msgstr "Flytt vindu til arbeidsområde 1"
#: ../src/metacity.schemas.in.h:60
#: ../src/metacity.schemas.in.h:59
msgid "Move window to workspace 10"
msgstr "Flytt vindu til arbeidsområde 10"
#: ../src/metacity.schemas.in.h:61
#: ../src/metacity.schemas.in.h:60
msgid "Move window to workspace 11"
msgstr "Flytt vindu til arbeidsområde 11"
#: ../src/metacity.schemas.in.h:62
#: ../src/metacity.schemas.in.h:61
msgid "Move window to workspace 12"
msgstr "Flytt vindu til arbeidsområde 12"
#: ../src/metacity.schemas.in.h:63
#: ../src/metacity.schemas.in.h:62
msgid "Move window to workspace 2"
msgstr "Flytt vindu til arbeidsområde 2"
#: ../src/metacity.schemas.in.h:64
#: ../src/metacity.schemas.in.h:63
msgid "Move window to workspace 3"
msgstr "Flytt vindu til arbeidsområde 3"
#: ../src/metacity.schemas.in.h:65
#: ../src/metacity.schemas.in.h:64
msgid "Move window to workspace 4"
msgstr "Flytt vindu til arbeidsområde 4"
#: ../src/metacity.schemas.in.h:66
#: ../src/metacity.schemas.in.h:65
msgid "Move window to workspace 5"
msgstr "Flytt vindu til arbeidsområde 5"
#: ../src/metacity.schemas.in.h:67
#: ../src/metacity.schemas.in.h:66
msgid "Move window to workspace 6"
msgstr "Flytt vindu til arbeidsområde 6"
#: ../src/metacity.schemas.in.h:68
#: ../src/metacity.schemas.in.h:67
msgid "Move window to workspace 7"
msgstr "Flytt vindu til arbeidsområde 7"
#: ../src/metacity.schemas.in.h:69
#: ../src/metacity.schemas.in.h:68
msgid "Move window to workspace 8"
msgstr "Flytt vindu til arbeidsområde 8"
#: ../src/metacity.schemas.in.h:70
#: ../src/metacity.schemas.in.h:69
msgid "Move window to workspace 9"
msgstr "Flytt vindu til arbeidsområde 9"
#: ../src/metacity.schemas.in.h:71
#: ../src/metacity.schemas.in.h:70
msgid "Name of workspace"
msgstr "Navn på arbeidsområde"
#: ../src/metacity.schemas.in.h:72
#: ../src/metacity.schemas.in.h:71
msgid "Number of workspaces"
msgstr "Antall arbeidsområder"
#: ../src/metacity.schemas.in.h:73
#: ../src/metacity.schemas.in.h:72
msgid ""
"Number of workspaces. Must be more than zero, and has a fixed maximum to "
"prevent making the desktop unusable by accidentally asking for too many "
@@ -831,26 +817,46 @@ msgstr ""
"hindre at noen ødelegger skrivebordet ved å be om for mange arbeidsområder "
"ved en feiltagelse."
#: ../src/metacity.schemas.in.h:74
#: ../src/metacity.schemas.in.h:73
msgid "Raise obscured window, otherwise lower"
msgstr "Hev vindu hvis skjult, senk det ellers"
#: ../src/metacity.schemas.in.h:75
#: ../src/metacity.schemas.in.h:74
msgid "Raise window above other windows"
msgstr "Hev vinduet over andre vinduer"
#: ../src/metacity.schemas.in.h:76
#: ../src/metacity.schemas.in.h:75
msgid "Resize window"
msgstr "Endre størrelse på vindu"
#: ../src/metacity.schemas.in.h:77
#: ../src/metacity.schemas.in.h:76
msgid "Run a defined command"
msgstr "Kjør en definert kommando"
#: ../src/metacity.schemas.in.h:78
#: ../src/metacity.schemas.in.h:77
msgid "Run a terminal"
msgstr "Kjør en terminal"
#: ../src/metacity.schemas.in.h:78
msgid ""
"Setting this option to false can lead to buggy behavior, so users are "
"strongly discouraged from changing it from the default of true. Many actions "
"(e.g. clicking in the client area, moving or resizing the window) normally "
"raise the window as a side-effect. Set this option to false to decouple "
"raising from other user actions. Even when this option is false, windows can "
"still be raised by an alt-left-click anywhere on the window, a normal click "
"on the window decorations, or by special messages from pagers, such as "
"activation requests from tasklist applets. This option is currently disabled "
"in click-to-focus mode. Note that the list of ways to raise windows when "
"raise_on_click is false does not include programmatic requests from "
"applications to raise windows; such requests will be ignored regardless of "
"the reason for the request. If you are an application developer and have a "
"user complaining that your application does not work with this setting "
"disabled, tell them it is _their_ fault for breaking their window manager "
"and that they need to change this option back to true or live with the bug "
"they requested. See also http://bugzilla.gnome.org/show_bug.cgi?id=445447#c6."
msgstr ""
#: ../src/metacity.schemas.in.h:79
msgid "Show the panel menu"
msgstr "Vis panelmenyen"
@@ -2295,15 +2301,11 @@ msgid "Toggle window on all workspaces"
msgstr "Bytt mellom vising av vindu på alle arbeidsområder"
#: ../src/metacity.schemas.in.h:196
#, fuzzy
msgid ""
"Turns on a visual indication when an application or the system issues a "
"'bell' or 'beep'; useful for the hard-of-hearing and for use in noisy "
"environments."
msgstr ""
"Aktiverer en synlig indikator når et program eller systemet lager et pip; "
"nyttig for hørselsskadde og for bruk i støyende miljøer, eller når hørbart "
"pip er slått av."
msgstr "Aktiverer en synlig indikator når et program eller systemet lager et pip; nyttig for hørselsskadde og for bruk i støyende miljøer."
#: ../src/metacity.schemas.in.h:197
msgid "Unmaximize window"
@@ -2329,19 +2331,19 @@ msgstr "Fokuseringsmodus for vindu"
msgid "Window title font"
msgstr "Skrift for vindutittel"
#: ../src/prefs.c:579 ../src/prefs.c:595 ../src/prefs.c:611 ../src/prefs.c:627
#: ../src/prefs.c:643 ../src/prefs.c:659 ../src/prefs.c:675 ../src/prefs.c:695
#: ../src/prefs.c:711 ../src/prefs.c:727 ../src/prefs.c:745 ../src/prefs.c:761
#: ../src/prefs.c:780 ../src/prefs.c:796 ../src/prefs.c:813 ../src/prefs.c:829
#: ../src/prefs.c:845 ../src/prefs.c:862 ../src/prefs.c:878 ../src/prefs.c:894
#: ../src/prefs.c:910 ../src/prefs.c:926 ../src/prefs.c:941 ../src/prefs.c:956
#: ../src/prefs.c:971 ../src/prefs.c:987 ../src/prefs.c:1003
#: ../src/prefs.c:1019 ../src/prefs.c:1035
#: ../src/prefs.c:579 ../src/prefs.c:607 ../src/prefs.c:623 ../src/prefs.c:639
#: ../src/prefs.c:655 ../src/prefs.c:671 ../src/prefs.c:687 ../src/prefs.c:703
#: ../src/prefs.c:723 ../src/prefs.c:739 ../src/prefs.c:755 ../src/prefs.c:773
#: ../src/prefs.c:789 ../src/prefs.c:808 ../src/prefs.c:824 ../src/prefs.c:859
#: ../src/prefs.c:875 ../src/prefs.c:892 ../src/prefs.c:908 ../src/prefs.c:924
#: ../src/prefs.c:940 ../src/prefs.c:956 ../src/prefs.c:971 ../src/prefs.c:986
#: ../src/prefs.c:1001 ../src/prefs.c:1017 ../src/prefs.c:1033
#: ../src/prefs.c:1049 ../src/prefs.c:1065
#, c-format
msgid "GConf key \"%s\" is set to an invalid type\n"
msgstr "GConf-nøkkel «%s» er satt til en ugyldig type\n"
#: ../src/prefs.c:1080
#: ../src/prefs.c:1110
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -2350,12 +2352,12 @@ msgstr ""
"«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for endring av "
"musknapp\n"
#: ../src/prefs.c:1104 ../src/prefs.c:1125 ../src/prefs.c:1667
#: ../src/prefs.c:1134 ../src/prefs.c:1155 ../src/prefs.c:1697
#, c-format
msgid "GConf key '%s' is set to an invalid value\n"
msgstr "GConf-nøkkel «%s» er satt til en ugyldig verdi\n"
#: ../src/prefs.c:1254
#: ../src/prefs.c:1284
#, c-format
msgid ""
"%d stored in GConf key %s is not a reasonable cursor_size; must be in the "
@@ -2364,12 +2366,12 @@ msgstr ""
"%d lagret i GConf-nøkkel %s er ikke en fornuftig verdi for cursor_size. Må "
"være i området 1..128\n"
#: ../src/prefs.c:1334
#: ../src/prefs.c:1364
#, c-format
msgid "Could not parse font description \"%s\" from GConf key %s\n"
msgstr "Kunne ikke tolke skriftbeskrivelsen «%s» fra GConf-nøkkel %s\n"
#: ../src/prefs.c:1561
#: ../src/prefs.c:1591
#, c-format
msgid ""
"%d stored in GConf key %s is not a reasonable number of workspaces, current "
@@ -2378,7 +2380,7 @@ msgstr ""
"%d lagret i GConf-nøkkel %s er ikke et lesbart antall arbeidsområder, aktivt "
"maksimum er %d\n"
#: ../src/prefs.c:1621
#: ../src/prefs.c:1651
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -2386,17 +2388,17 @@ msgstr ""
"Funksjonalitet for å gå rundt ødelagte programmer er deaktivert. Noen "
"programmer vil kanskje ikke oppføre seg korrekt.\n"
#: ../src/prefs.c:1694
#: ../src/prefs.c:1724
#, c-format
msgid "%d stored in GConf key %s is out of range 0 to %d\n"
msgstr "%d lagret i GConf-nøkkel %s er utenfor området 0 til %d\n"
#: ../src/prefs.c:1837
#: ../src/prefs.c:1873
#, c-format
msgid "Error setting number of workspaces to %d: %s\n"
msgstr "Feil under spesifisering av antall arbeidsområder til %d: %s\n"
#: ../src/prefs.c:2232 ../src/prefs.c:2402
#: ../src/prefs.c:2268 ../src/prefs.c:2438
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -2405,7 +2407,7 @@ msgstr ""
"«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for "
"tastaturbinding «%s»\n"
#: ../src/prefs.c:2818
#: ../src/prefs.c:2854
#, c-format
msgid "Error setting name for workspace %d to \"%s\": %s\n"
msgstr "Feil under setting av navn på arbeidsområde %d til «%s»: %s\n"
@@ -2415,12 +2417,12 @@ msgstr "Feil under setting av navn på arbeidsområde %d til «%s»: %s\n"
msgid "%d x %d"
msgstr "%d x %d"
#: ../src/screen.c:408
#: ../src/screen.c:410
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Skjerm %d på display «%s» er ugyldig\n"
#: ../src/screen.c:424
#: ../src/screen.c:426
#, c-format
msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
@@ -2429,87 +2431,87 @@ msgstr ""
"Skjerm %d på display «%s» har allerede en vindushåndterer; prøv å bruke "
"flagget --replace for å erstatte aktiv vindushåndterer.\n"
#: ../src/screen.c:451
#: ../src/screen.c:453
#, c-format
msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
msgstr ""
"Kunne ikke hente utvalg fra vinduhåndterer på skjerm %d, display «%s»\n"
#: ../src/screen.c:509
#: ../src/screen.c:511
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Skjerm %d på display «%s» har allerede en vinduhåndterer\n"
#: ../src/screen.c:714
#: ../src/screen.c:716
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Kunne ikke slippe skjerm %d på display «%s»\n"
#: ../src/session.c:844 ../src/session.c:851
#: ../src/session.c:826 ../src/session.c:833
#, c-format
msgid "Could not create directory '%s': %s\n"
msgstr "Kunne ikke opprette katalog «%s»: %s\n"
#: ../src/session.c:861
#: ../src/session.c:843
#, c-format
msgid "Could not open session file '%s' for writing: %s\n"
msgstr "Kunne ikke åpne sesjonsfil «%s» for skriving: %s\n"
#: ../src/session.c:1013
#: ../src/session.c:995
#, c-format
msgid "Error writing session file '%s': %s\n"
msgstr "Feil under skriving av sesjonsfil «%s»: %s\n"
#: ../src/session.c:1018
#: ../src/session.c:1000
#, c-format
msgid "Error closing session file '%s': %s\n"
msgstr "Feil under lukking av sesjonsfil «%s»: %s\n"
#: ../src/session.c:1093
#: ../src/session.c:1075
#, c-format
msgid "Failed to read saved session file %s: %s\n"
msgstr "Feil under lesing av lagret sesjonsfil %s: %s\n"
#: ../src/session.c:1128
#: ../src/session.c:1110
#, c-format
msgid "Failed to parse saved session file: %s\n"
msgstr "Feil under tolking av lagret sesjonsfil: %s\n"
#: ../src/session.c:1177
#: ../src/session.c:1159
msgid "<metacity_session> attribute seen but we already have the session ID"
msgstr "<metacity_session>-attributt sett men vi har allerede sesjons-ID"
#: ../src/session.c:1190
#: ../src/session.c:1172
#, c-format
msgid "Unknown attribute %s on <metacity_session> element"
msgstr "Ukjent attributt %s på <metacity_session>-element"
#: ../src/session.c:1207
#: ../src/session.c:1189
msgid "nested <window> tag"
msgstr "<window> tag med flere nivåer"
#: ../src/session.c:1265 ../src/session.c:1297
#: ../src/session.c:1247 ../src/session.c:1279
#, c-format
msgid "Unknown attribute %s on <window> element"
msgstr "Ukjent attributt %s på <window>-element"
#: ../src/session.c:1369
#: ../src/session.c:1351
#, c-format
msgid "Unknown attribute %s on <maximized> element"
msgstr "Ukjent attributt %s på <maximized>-element"
#: ../src/session.c:1429
#: ../src/session.c:1411
#, c-format
msgid "Unknown attribute %s on <geometry> element"
msgstr "Ukjent attributt %s på <geometry>-element"
#: ../src/session.c:1449
#: ../src/session.c:1431
#, c-format
msgid "Unknown element %s"
msgstr "Ukjent element %s"
#: ../src/session.c:1886
#: ../src/session.c:1868
#, c-format
msgid ""
"Error launching metacity-dialog to warn about apps that don't support "
@@ -3550,13 +3552,13 @@ msgstr "Programmet satte en feil _NET_WM_PID %lu\n"
msgid "%s (on %s)"
msgstr "%s (på %s)"
#: ../src/window-props.c:1405
#: ../src/window-props.c:1406
#, 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"
#. first time through
#: ../src/window.c:5541
#: ../src/window.c:5539
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -3572,7 +3574,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/window.c:6144
#: ../src/window.c:6101
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
@@ -3609,3 +3611,21 @@ msgid ""
msgstr ""
"Egenskap %s på vindu 0x%lx inneholdt ugyldig UTF-8 for oppføring %d i "
"listen\n"
#~ msgid ""
#~ "Many actions (e.g. clicking in the client area, moving or resizing the "
#~ "window) normally raise the window as a side-effect. Set this option to "
#~ "false to decouple raising from other user actions. Even when this option "
#~ "is false, windows can still be raised by an alt-left-click anywhere on "
#~ "the window, a normal click on the window decorations, or by special "
#~ "messages, such as activation requests from pagers. This option is "
#~ "currently disabled in click-to-focus mode."
#~ msgstr ""
#~ "Mange handlinger (f.eks klikk i klientområdet, flytting av eller endring "
#~ "av størrelse på vinduer) hever normalt sett vinduet som en sideeffekt. "
#~ "Sett dette alternativet til «false» for å fjerne koblingen mellom heving "
#~ "av vinduer og andre handlinger. Når denne er satt til «false» kan vinduer "
#~ "fremdeles heves av alt-venstreklikk hvor som helst på vinduet eller et "
#~ "normalt klikk på vindudekorasjonene eller spesielle meldinger slik som "
#~ "aktiveringsforespørsler fra skrivebordshåndterere. Dette alternativet er "
#~ "deaktivert i klikk-for-fokus modus."

703
po/nl.po

File diff suppressed because it is too large Load Diff

751
po/oc.po

File diff suppressed because it is too large Load Diff

1633
po/pa.po

File diff suppressed because it is too large Load Diff

899
po/pt.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1674
po/ro.po

File diff suppressed because it is too large Load Diff

901
po/ru.po

File diff suppressed because it is too large Load Diff

2987
po/si.po Normal file

File diff suppressed because it is too large Load Diff

2153
po/sk.po

File diff suppressed because it is too large Load Diff

441
po/sr.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2416
po/sv.po

File diff suppressed because it is too large Load Diff

1683
po/ta.po

File diff suppressed because it is too large Load Diff

401
po/th.po
View File

@@ -11,10 +11,10 @@ msgid ""
msgstr ""
"Project-Id-Version: metacity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-05-18 17:36+0700\n"
"PO-Revision-Date: 2007-05-18 17:41+0700\n"
"POT-Creation-Date: 2007-08-07 11:49+0700\n"
"PO-Revision-Date: 2007-08-07 11:51+0700\n"
"Last-Translator: Theppitak Karoonboonyanan <thep@linux.thai.net>\n"
"Language-Team: Thai <L10n@opentle.org>\n"
"Language-Team: Thai <thai-l10n@googlegroups.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -34,9 +34,15 @@ msgid "Usage: %s\n"
msgstr "วิธีใช้: %s\n"
#: ../src/tools/metacity-message.c:176 ../src/util.c:133
#, c-format
msgid "Metacity was compiled without support for verbose mode\n"
msgstr "Metacity ถูกคอมไพล์โดยไม่ได้เลือกรองรับโหมด verbose\n"
#: ../src/core.c:206
#, c-format
msgid "Unknown window information request: %d"
msgstr "คำร้องขอข้อมูลหน้าต่างที่ไม่รู้จัก: %d"
#: ../src/delete.c:67 ../src/delete.c:94 ../src/metacity-dialog.c:50
#: ../src/theme-parser.c:484
#, c-format
@@ -59,13 +65,13 @@ msgstr "ไม่เข้าใจข้อความ \"%s\" จากโพ
msgid "Error reading from dialog display process: %s\n"
msgstr "เกิดข้อผิดพลาดขณะอ่านจากโพรเซสกล่องโต้ตอบ: %s\n"
#: ../src/delete.c:348
#: ../src/delete.c:350
#, c-format
msgid ""
"Error launching metacity-dialog to ask about killing an application: %s\n"
msgstr "เกิดข้อผิดพลาด ขณะเปิดหน้าต่าง ถามการฆ่าโปรแกรม: %s\n"
#: ../src/delete.c:456
#: ../src/delete.c:459
#, c-format
msgid "Failed to get hostname: %s\n"
msgstr "ไม่สามารถอ่านชื่อโฮสต์: %s\n"
@@ -90,47 +96,47 @@ msgstr ""
msgid "Fatal IO error %d (%s) on display '%s'.\n"
msgstr "เกิดข้อผิดพลาดร้ายแรง %d (%s) ในการอ่านเขียนข้อมูลจากดิสเพลย์'%s'\n"
#: ../src/frames.c:1069
#: ../src/frames.c:1078
msgid "Close Window"
msgstr "ปิดหน้าต่าง"
#: ../src/frames.c:1072
#: ../src/frames.c:1081
msgid "Window Menu"
msgstr "เมนูหน้าต่าง"
#: ../src/frames.c:1075
#: ../src/frames.c:1084
msgid "Minimize Window"
msgstr "ย่อหน้าต่างหาย"
#: ../src/frames.c:1078
#: ../src/frames.c:1087
msgid "Maximize Window"
msgstr "ขยายหน้าต่างเต็ม"
#: ../src/frames.c:1081
#: ../src/frames.c:1090
msgid "Unmaximize Window"
msgstr "เลิกขยายหน้าต่างเต็ม"
#: ../src/frames.c:1084
#: ../src/frames.c:1093
msgid "Roll Up Window"
msgstr "_ม้วนหน้าต่างขึ้น"
#: ../src/frames.c:1087
#: ../src/frames.c:1096
msgid "Unroll Window"
msgstr "คลี่หน้าต่างกลับ"
#: ../src/frames.c:1090
#: ../src/frames.c:1099
msgid "Keep Window On Top"
msgstr "วางหน้าต่างไว้บนสุด"
#: ../src/frames.c:1093
#: ../src/frames.c:1102
msgid "Remove Window From Top"
msgstr "เลิกวางหน้าต่างไว้บนสุด"
#: ../src/frames.c:1096
#: ../src/frames.c:1105
msgid "Always On Visible Workspace"
msgstr "แสดงบนพื้นที่ทำงานเสมอ"
#: ../src/frames.c:1099
#: ../src/frames.c:1108
msgid "Put Window On Only One Workspace"
msgstr "วางหน้าต่างบนพื้นที่ทำงานเดียวเท่านั้น"
@@ -151,7 +157,8 @@ msgstr "ไม่สามารถเปิดกล่องโต้ตอบ
msgid "No command %d has been defined.\n"
msgstr "คำสั่ง %d ยังไม่ได้ถูกกำหนด\n"
#: ../src/keybindings.c:3846
#: ../src/keybindings.c:3849
#, c-format
msgid "No terminal command has been defined.\n"
msgstr "คำสั่งเปิดเทอร์มินัลยังไม่ได้ถูกกำหนด\n"
@@ -160,13 +167,13 @@ msgstr "คำสั่งเปิดเทอร์มินัลยังไ
#, c-format
msgid ""
"metacity %s\n"
"Copyright (C) 2001-2002 Havoc Pennington, Red Hat, Inc., and others\n"
"Copyright (C) 2001-2007 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"
msgstr ""
"metacity %s\n"
"สงวนลิขสิทธิ์ (C) 2001-2002 Havoc Pennington, Red Hat, Inc., และอื่นๆ\n"
"สงวนลิขสิทธิ์ (C) 2001-2007 Havoc Pennington, Red Hat, Inc., และอื่นๆ\n"
"นี่เป็นซอฟต์แวร์เสรี อ่านเงื่อนไขลิขสิทธิ์ได้ในโค้ดต้นฉบับ\n"
"ไม่รับผิดชอบข้อเสียหายใดๆ "
"ไม่รับประกันความเหมาะสมในเชิงพาณิชย์หรือการใช้งานเฉพาะทางอย่างหนึ่งอย่างใด\n"
@@ -195,119 +202,120 @@ msgstr "ใช้ค่าเริ่มต้นของวาระจาก
msgid "Print version"
msgstr "แสดงเลขรุ่น"
#: ../src/main.c:352
#: ../src/main.c:353
#, c-format
msgid "Failed to scan themes directory: %s\n"
msgstr "ไม่สามารถอ่านโฟลเดอร์ชุดตกแต่ง: %s\n"
#: ../src/main.c:368
#: ../src/main.c:369
#, c-format
msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
msgstr "ไม่พบชุดตกแต่ง โปรดตรวจดูว่า %s มีอยู่จริง และบรรจุชุดตกแต่งที่ควรจะมี\n"
#: ../src/main.c:428
#: ../src/main.c:429
#, c-format
msgid "Failed to restart: %s\n"
msgstr "ไม่สามารถเริ่มการทำงานใหม่ของ: %s\n"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:68
#: ../src/menu.c:70
msgid "Mi_nimize"
msgstr "ย่_อหาย"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:70
#: ../src/menu.c:72
msgid "Ma_ximize"
msgstr "ขย_ายเต็ม"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:72
#: ../src/menu.c:74
msgid "Unma_ximize"
msgstr "เลิกขย_ายเต็ม"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:74
#: ../src/menu.c:76
msgid "Roll _Up"
msgstr "_ม้วนขึ้น"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:76
#: ../src/menu.c:78
msgid "_Unroll"
msgstr "_คลี่กลับ"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:78
#: ../src/menu.c:80
msgid "_Move"
msgstr "_ย้าย"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:80
#: ../src/menu.c:82
msgid "_Resize"
msgstr "_ปรับขนาด"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:82
#: ../src/menu.c:84
msgid "Move Titlebar On_screen"
msgstr "ย้ายแถบหัวเรื่องกลับเข้า_จอ"
#. separator
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:85
msgid "_Close"
msgstr "ปิ_ด"
#. separator
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:88 ../src/menu.c:90
#: ../src/menu.c:87 ../src/menu.c:89
msgid "Always on _Top"
msgstr "อยู่_บนสุด"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:92
#: ../src/menu.c:91
msgid "_Always on Visible Workspace"
msgstr "แสดงบนพื้นที่ทำงานเ_สมอ"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:94
#: ../src/menu.c:93
msgid "_Only on This Workspace"
msgstr "แสดงบนพื้นที่ทำงาน_นี้เท่านั้น"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:96
#: ../src/menu.c:95
msgid "Move to Workspace _Left"
msgstr "ย้ายไปพื้นที่ทำงานซ้_าย"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:98
#: ../src/menu.c:97
msgid "Move to Workspace R_ight"
msgstr "ย้ายไปพื้นที่ทำงานข_วา"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:100
#: ../src/menu.c:99
msgid "Move to Workspace _Up"
msgstr "ย้ายไปพื้นที่ทำงาน_บน"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:102
#: ../src/menu.c:101
msgid "Move to Workspace _Down"
msgstr "ย้ายไปพื้นที่ทำงาน_ล่าง"
#: ../src/menu.c:193 ../src/prefs.c:2238 ../src/prefs.c:2773
#. separator
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/menu.c:105
msgid "_Close"
msgstr "ปิ_ด"
#: ../src/menu.c:199 ../src/prefs.c:2246 ../src/prefs.c:2780
#, c-format
msgid "Workspace %d"
msgstr "พื้นที่ทำงาน %d"
#: ../src/menu.c:202
#: ../src/menu.c:208
#, c-format
msgid "Workspace 1_0"
msgstr "พื้นที่ทำงาน 1_0"
#: ../src/menu.c:204
#: ../src/menu.c:210
#, c-format
msgid "Workspace %s%d"
msgstr "พื้นที่ทำงาน %s%d"
#: ../src/menu.c:407
#: ../src/menu.c:390
msgid "Move to Another _Workspace"
msgstr "ย้ายไป_พื้นที่ทำงานอื่น"
@@ -620,198 +628,182 @@ msgid "Lower window below other windows"
msgstr "ถอยหน้าต่างลงไปใว้หลังหน้าต่างอื่น"
#: ../src/metacity.schemas.in.h:28
msgid ""
"Many actions (e.g. clicking in the client area, moving or resizing the "
"window) normally raise the window as a side-effect. Set this option to false "
"to decouple raising from other user actions. Even when this option is false, "
"windows can still be raised by an alt-left-click anywhere on the window, a "
"normal click on the window decorations, or by special messages, such as "
"activation requests from pagers. This option is currently disabled in click-"
"to-focus mode."
msgstr ""
"โดยปกติ ปฏิบัติการหลายอย่าง (เช่น การคลิกบนพื้นที่ภายในหน้าต่าง การย้ายหรือปรับขนาดหน้าต่าง) "
"จะยกหน้าต่างขึ้นด้วย ถ้ากำหนดตัวเลือกนี้เป็นเท็จ จะไม่ยกหน้าต่างเมื่อมีปฏิสัมพันธ์กับผู้ใช้ "
"แต่ยังสามารถยกขึ้นได้โดย alt-คลิกซ้าย ภายในพื้นที่หน้าต่าง หรือคลิกแบบธรรมดาที่กรอบหน้าต่าง "
"หรือโดยข้อความพิเศษ เช่นการร้องขอกระตุ้นหน้าต่างจากโปรแกรมจัดหน้าพื้นโต๊ะ ขณะนี้ "
"ตัวเลือกนี้จะไม่มีผลถ้าอยู่ในโหมดโฟกัสด้วยการคลิก"
#: ../src/metacity.schemas.in.h:29
msgid "Maximize window"
msgstr "ขยายหน้าต่างเต็มจอ"
#: ../src/metacity.schemas.in.h:30
#: ../src/metacity.schemas.in.h:29
msgid "Maximize window horizontally"
msgstr "ขยายหน้าต่างเต็มด้านกว้าง"
#: ../src/metacity.schemas.in.h:31
#: ../src/metacity.schemas.in.h:30
msgid "Maximize window vertically"
msgstr "ขยายหน้าต่างเต็มด้านสูง"
#: ../src/metacity.schemas.in.h:32
#: ../src/metacity.schemas.in.h:31
msgid "Minimize window"
msgstr "ย่อหน้าต่างหาย"
#: ../src/metacity.schemas.in.h:33
#: ../src/metacity.schemas.in.h:32
msgid "Modifier to use for modified window click actions"
msgstr "ปุ่ม modifier เพื่อเปลี่ยนพฤติกรรมการคลิกหน้าต่าง"
#: ../src/metacity.schemas.in.h:34
#: ../src/metacity.schemas.in.h:33
msgid "Move backward between panels and the desktop immediately"
msgstr "ย้ายโฟกัสย้อนหลังระหว่างพาเนลและพื้นโต๊ะโดยทันที"
#: ../src/metacity.schemas.in.h:35
#: ../src/metacity.schemas.in.h:34
msgid "Move backwards between panels and the desktop with popup"
msgstr "ย้ายโฟกัสย้อนหลังระหว่างพาเนลและพื้นโต๊ะผ่านป๊อบอัพ"
#: ../src/metacity.schemas.in.h:36
#: ../src/metacity.schemas.in.h:35
msgid "Move backwards between windows immediately"
msgstr "ย้ายโฟกัสย้อนหลังระหว่างหน้าต่างโดยทันที"
#: ../src/metacity.schemas.in.h:37
#: ../src/metacity.schemas.in.h:36
msgid "Move backwards between windows of an application immediately"
msgstr "ย้ายโฟกัสย้อนหลังระหว่างหน้าต่างทั้งหลายของโปรแกรมประยุกต์โดยทันที"
#: ../src/metacity.schemas.in.h:38
#: ../src/metacity.schemas.in.h:37
msgid "Move backwards between windows of an application with popup"
msgstr "ย้ายโฟกัสย้อนหลังระหว่างหน้าต่างทั้งหลายของโปรแกรมประยุกต์ผ่านป๊อบอัพ"
#: ../src/metacity.schemas.in.h:39
#: ../src/metacity.schemas.in.h:38
msgid "Move between panels and the desktop immediately"
msgstr "ย้ายโฟกัสระหว่างพาเนลและพื้นโต๊ะโดยทันที"
#: ../src/metacity.schemas.in.h:40
#: ../src/metacity.schemas.in.h:39
msgid "Move between panels and the desktop with popup"
msgstr "ย้ายโฟกัสระหว่างพาเนลและพื้นโต๊ะผ่านป๊อบอัพ"
#: ../src/metacity.schemas.in.h:41
#: ../src/metacity.schemas.in.h:40
msgid "Move between windows immediately"
msgstr "ย้ายโฟกัสระหว่างหน้าต่างโดยทันที"
#: ../src/metacity.schemas.in.h:42
#: ../src/metacity.schemas.in.h:41
msgid "Move between windows of an application immediately"
msgstr "ย้ายโฟกัสระหว่างหน้าต่างทั้งหลายของโปรแกรมประยุกต์โดยทันที"
#: ../src/metacity.schemas.in.h:43
#: ../src/metacity.schemas.in.h:42
msgid "Move between windows of an application with popup"
msgstr "ย้ายโฟกัสระหว่างหน้าต่างทั้งหลายของโปรแกรมประยุกต์ผ่านป๊อบอัพ"
#: ../src/metacity.schemas.in.h:44
#: ../src/metacity.schemas.in.h:43
msgid "Move between windows with popup"
msgstr "ย้ายโฟกัสระหว่างหน้าต่างผ่านป๊อบอัพ"
#: ../src/metacity.schemas.in.h:45
#: ../src/metacity.schemas.in.h:44
msgid "Move focus backwards between windows using popup display"
msgstr "ย้ายโฟกัสย้อนหลังระหว่างหน้าต่างผ่านป๊อบอัพ"
#: ../src/metacity.schemas.in.h:46
#: ../src/metacity.schemas.in.h:45
msgid "Move window"
msgstr "ย้ายหน้าต่าง"
#: ../src/metacity.schemas.in.h:47
#: ../src/metacity.schemas.in.h:46
msgid "Move window one workspace down"
msgstr "ย้ายหน้าต่างไปพื้นที่ทำงานด้านล่าง"
#: ../src/metacity.schemas.in.h:48
#: ../src/metacity.schemas.in.h:47
msgid "Move window one workspace to the left"
msgstr "ย้ายหน้าต่างไปพื้นที่ทำงานด้านซ้าย"
#: ../src/metacity.schemas.in.h:49
#: ../src/metacity.schemas.in.h:48
msgid "Move window one workspace to the right"
msgstr "ย้ายหน้าต่างไปพื้นที่ทำงานด้านขวา"
#: ../src/metacity.schemas.in.h:50
#: ../src/metacity.schemas.in.h:49
msgid "Move window one workspace up"
msgstr "ย้ายหน้าต่างไปพื้นที่ทำงานด้านบน"
#: ../src/metacity.schemas.in.h:51
#: ../src/metacity.schemas.in.h:50
msgid "Move window to east side of screen"
msgstr "ย้ายหน้าต่างไปที่ขอบด้านตะวันออกของหน้าจอ"
#: ../src/metacity.schemas.in.h:52
#: ../src/metacity.schemas.in.h:51
msgid "Move window to north side of screen"
msgstr "ย้ายหน้าต่างไปที่ขอบด้านเหนือของหน้าจอ"
#: ../src/metacity.schemas.in.h:53
#: ../src/metacity.schemas.in.h:52
msgid "Move window to north-east corner"
msgstr "ย้ายหน้าต่างไปที่มุมตะวันออกเฉียงเหนือของหน้าจอ"
#: ../src/metacity.schemas.in.h:54
#: ../src/metacity.schemas.in.h:53
msgid "Move window to north-west corner"
msgstr "ย้ายหน้าต่างไปที่มุมตะวันตกเฉียงเหนือของหน้าจอ"
#: ../src/metacity.schemas.in.h:55
#: ../src/metacity.schemas.in.h:54
msgid "Move window to south side of screen"
msgstr "ย้ายหน้าต่างไปที่ขอบด้านใต้ของหน้าจอ"
#: ../src/metacity.schemas.in.h:56
#: ../src/metacity.schemas.in.h:55
msgid "Move window to south-east corner"
msgstr "ย้ายหน้าต่างไปที่มุมตะวันออกเฉียงใต้ของหน้าจอ"
#: ../src/metacity.schemas.in.h:57
#: ../src/metacity.schemas.in.h:56
msgid "Move window to south-west corner"
msgstr "ย้ายหน้าต่างไปที่มุมตะวันตกเฉียงใต้ของหน้าจอ"
#: ../src/metacity.schemas.in.h:58
#: ../src/metacity.schemas.in.h:57
msgid "Move window to west side of screen"
msgstr "ย้ายหน้าต่างไปที่ขอบด้านตะวันตกของหน้าจอ"
#: ../src/metacity.schemas.in.h:59
#: ../src/metacity.schemas.in.h:58
msgid "Move window to workspace 1"
msgstr "ย้ายหน้าต่างไปพื้นที่ทำงาน 1"
#: ../src/metacity.schemas.in.h:60
#: ../src/metacity.schemas.in.h:59
msgid "Move window to workspace 10"
msgstr "ย้ายหน้าต่างไปพื้นที่ทำงาน 10"
#: ../src/metacity.schemas.in.h:61
#: ../src/metacity.schemas.in.h:60
msgid "Move window to workspace 11"
msgstr "ย้ายหน้าต่างไปพื้นที่ทำงาน 11"
#: ../src/metacity.schemas.in.h:62
#: ../src/metacity.schemas.in.h:61
msgid "Move window to workspace 12"
msgstr "ย้ายหน้าต่างไปพื้นที่ทำงาน 12"
#: ../src/metacity.schemas.in.h:63
#: ../src/metacity.schemas.in.h:62
msgid "Move window to workspace 2"
msgstr "ย้ายหน้าต่างไปพื้นที่ทำงาน 2"
#: ../src/metacity.schemas.in.h:64
#: ../src/metacity.schemas.in.h:63
msgid "Move window to workspace 3"
msgstr "ย้ายหน้าต่างไปพื้นที่ทำงาน 3"
#: ../src/metacity.schemas.in.h:65
#: ../src/metacity.schemas.in.h:64
msgid "Move window to workspace 4"
msgstr "ย้ายหน้าต่างไปพื้นที่ทำงาน 4"
#: ../src/metacity.schemas.in.h:66
#: ../src/metacity.schemas.in.h:65
msgid "Move window to workspace 5"
msgstr "ย้ายหน้าต่างไปพื้นที่ทำงาน 5"
#: ../src/metacity.schemas.in.h:67
#: ../src/metacity.schemas.in.h:66
msgid "Move window to workspace 6"
msgstr "ย้ายหน้าต่างไปพื้นที่ทำงาน 6"
#: ../src/metacity.schemas.in.h:68
#: ../src/metacity.schemas.in.h:67
msgid "Move window to workspace 7"
msgstr "ย้ายหน้าต่างไปพื้นที่ทำงาน 7"
#: ../src/metacity.schemas.in.h:69
#: ../src/metacity.schemas.in.h:68
msgid "Move window to workspace 8"
msgstr "ย้ายหน้าต่างไปพื้นที่ทำงาน 8"
#: ../src/metacity.schemas.in.h:70
#: ../src/metacity.schemas.in.h:69
msgid "Move window to workspace 9"
msgstr "ย้ายหน้าต่างไปพื้นที่ทำงาน 9"
#: ../src/metacity.schemas.in.h:71
#: ../src/metacity.schemas.in.h:70
msgid "Name of workspace"
msgstr "ชื่อของพื้นที่ทำงาน"
#: ../src/metacity.schemas.in.h:72
#: ../src/metacity.schemas.in.h:71
msgid "Number of workspaces"
msgstr "จำนวนพื้นที่ทำงาน"
#: ../src/metacity.schemas.in.h:73
#: ../src/metacity.schemas.in.h:72
msgid ""
"Number of workspaces. Must be more than zero, and has a fixed maximum to "
"prevent making the desktop unusable by accidentally asking for too many "
@@ -825,26 +817,60 @@ msgstr ""
# dialog out too wide.
#
# The next entry in the list will make this entry clear.
#: ../src/metacity.schemas.in.h:74
#: ../src/metacity.schemas.in.h:73
msgid "Raise obscured window, otherwise lower"
msgstr "ยกหน้าต่างขึ้นถ้าถูกบัง ไม่งั้นเอาลงด้านหลัง"
#: ../src/metacity.schemas.in.h:75
#: ../src/metacity.schemas.in.h:74
msgid "Raise window above other windows"
msgstr "ยกหน้าต่างขึ้นมาไว้หน้าหน้าต่างอื่นๆ"
#: ../src/metacity.schemas.in.h:76
#: ../src/metacity.schemas.in.h:75
msgid "Resize window"
msgstr "ปรับขนาดหน้าต่าง"
#: ../src/metacity.schemas.in.h:77
#: ../src/metacity.schemas.in.h:76
msgid "Run a defined command"
msgstr "เรียกใช้คำสั่งที่กำหนดไว้"
#: ../src/metacity.schemas.in.h:78
#: ../src/metacity.schemas.in.h:77
msgid "Run a terminal"
msgstr "เปิดเทอร์มินัล"
#: ../src/metacity.schemas.in.h:78
msgid ""
"Setting this option to false can lead to buggy behavior, so users are "
"strongly discouraged from changing it from the default of true. Many actions "
"(e.g. clicking in the client area, moving or resizing the window) normally "
"raise the window as a side-effect. Set this option to false to decouple "
"raising from other user actions. Even when this option is false, windows can "
"still be raised by an alt-left-click anywhere on the window, a normal click "
"on the window decorations, or by special messages from pagers, such as "
"activation requests from tasklist applets. This option is currently disabled "
"in click-to-focus mode. Note that the list of ways to raise windows when "
"raise_on_click is false does not include programmatic requests from "
"applications to raise windows; such requests will be ignored regardless of "
"the reason for the request. If you are an application developer and have a "
"user complaining that your application does not work with this setting "
"disabled, tell them it is _their_ fault for breaking their window manager "
"and that they need to change this option back to true or live with the bug "
"they requested. See also http://bugzilla.gnome.org/show_bug.cgi?id=445447#c6."
msgstr ""
"การกำหนดตัวเลือกนี้เป็นเท็จ อาจทำให้การทำงานผิดพลาด ดังนั้น "
"จึงไม่ขอแนะนำให้เปลี่ยนค่าจากค่าปกติที่เป็นค่าจริง โดยปกติ ปฏิบัติการหลายอย่าง (เช่น "
"การคลิกบนพื้นที่ภายในหน้าต่าง การย้ายหรือปรับขนาดหน้าต่าง) จะยกหน้าต่างขึ้นด้วย "
"ถ้ากำหนดตัวเลือกนี้เป็นเท็จ จะไม่ยกหน้าต่างเมื่อมีปฏิสัมพันธ์กับผู้ใช้ แต่ยังสามารถยกขึ้นได้โดย alt-"
"คลิกซ้าย ภายในพื้นที่หน้าต่าง หรือคลิกแบบธรรมดาที่กรอบหน้าต่าง "
"หรือโดยข้อความพิเศษจากโปรแกรมจัดหน้าพื้นโต๊ะ เช่น "
"การร้องขอกระตุ้นหน้าต่างจากแอพเพล็ตรายการงาน ขณะนี้ "
"ตัวเลือกนี้จะไม่มีผลถ้าอยู่ในโหมดโฟกัสด้วยการคลิก สังเกตว่า วิธีการต่างๆ ที่จะยกหน้าต่างขึ้นเมื่อ "
"raise_on_click เป็นเท็จนี้ ไม่นับรวมการร้องขอจากโปรแกรมเพื่อขอยกหน้าต่างขึ้น "
"การร้องขอดังกล่าวจะถูกปฏิเสธไม่ว่ากรณีใดๆ ถ้าคุณเป็นนักพัฒนาโปรแกรม "
"และมีผู้ใช้บ่นว่าโปรแกรมของคุณทำงานผิดพลาดเมื่อปิดค่านี้ ก็บอกเขาได้เลย ว่าเป็นความผิด "
"_ของเขาเอง_ ที่ทำให้โปรแกรมจัดการหน้าต่างรวน และเขาต้องเปลี่ยนตัวเลือกนี้กลับเป็นค่าจริง "
"มิฉะนั้น ก็จะต้องอยู่กับบั๊กที่เขาเรียกร้องต่อไป กรุณาอ่าน http://bugzilla.gnome.org/show_bug."
"cgi?id=445447#c6 เพิ่มเติม"
#: ../src/metacity.schemas.in.h:79
msgid "Show the panel menu"
msgstr "แสดงเมนูพาเนล"
@@ -2189,31 +2215,36 @@ msgstr "โหมดโฟกัสหน้าต่าง"
msgid "Window title font"
msgstr "แบบอักษรหัวหน้าต่าง"
#: ../src/prefs.c:579 ../src/prefs.c:607 ../src/prefs.c:623 ../src/prefs.c:639
#: ../src/prefs.c:655 ../src/prefs.c:671 ../src/prefs.c:687 ../src/prefs.c:703
#: ../src/prefs.c:723 ../src/prefs.c:739 ../src/prefs.c:755 ../src/prefs.c:773
#: ../src/prefs.c:789 ../src/prefs.c:808 ../src/prefs.c:824 ../src/prefs.c:859
#: ../src/prefs.c:875 ../src/prefs.c:892 ../src/prefs.c:908 ../src/prefs.c:924
#: ../src/prefs.c:940 ../src/prefs.c:956 ../src/prefs.c:971 ../src/prefs.c:986
#: ../src/prefs.c:1001 ../src/prefs.c:1017 ../src/prefs.c:1033
#: ../src/prefs.c:1049 ../src/prefs.c:1065
#: ../src/prefs.c:434
#, c-format
msgid "Type of %s was not integer"
msgstr "ชนิดของ %s ไม่ใช่จำนวนเต็ม"
#: ../src/prefs.c:572 ../src/prefs.c:600 ../src/prefs.c:616 ../src/prefs.c:632
#: ../src/prefs.c:648 ../src/prefs.c:664 ../src/prefs.c:680 ../src/prefs.c:696
#: ../src/prefs.c:716 ../src/prefs.c:732 ../src/prefs.c:748 ../src/prefs.c:766
#: ../src/prefs.c:782 ../src/prefs.c:801 ../src/prefs.c:817 ../src/prefs.c:852
#: ../src/prefs.c:868 ../src/prefs.c:885 ../src/prefs.c:901 ../src/prefs.c:917
#: ../src/prefs.c:933 ../src/prefs.c:949 ../src/prefs.c:964 ../src/prefs.c:979
#: ../src/prefs.c:994 ../src/prefs.c:1010 ../src/prefs.c:1026
#: ../src/prefs.c:1042 ../src/prefs.c:1058
#, c-format
msgid "GConf key \"%s\" is set to an invalid type\n"
msgstr "GConf คีย์ \"%s\" ถูกตั้งค่าเป็นชนิดที่ใช้ไม่ได้\n"
#: ../src/prefs.c:1110
#: ../src/prefs.c:1103
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
"modifier\n"
msgstr "\"%s\" ที่พบในฐานข้อมูลข้อปรับแต่ง ใช้เป็นปุ่มใช้ร่วมสำหรับเมาส์ไม่ได้\n"
#: ../src/prefs.c:1134 ../src/prefs.c:1155 ../src/prefs.c:1697
#: ../src/prefs.c:1127 ../src/prefs.c:1148 ../src/prefs.c:1705
#, c-format
msgid "GConf key '%s' is set to an invalid value\n"
msgstr "GConf คีย์ '%s' ถูกตั้งค่าเป็นค่าที่ใช้ไม่ได้\n"
#: ../src/prefs.c:1284
#: ../src/prefs.c:1277
#, c-format
msgid ""
"%d stored in GConf key %s is not a reasonable cursor_size; must be in the "
@@ -2221,19 +2252,19 @@ msgid ""
msgstr ""
"%d ใน GConf คีย์ %s ไม่ใช่ขนาดเคอร์เซอร์ที่สมเหตุสมผล ค่าดังกล่าวควรอยู่ในช่วง 1..128\n"
#: ../src/prefs.c:1364
#: ../src/prefs.c:1357
#, c-format
msgid "Could not parse font description \"%s\" from GConf key %s\n"
msgstr "ไม่เข้าใจคำบรรยายแบบตัวอักษร \"%s\" จาก GConf คีย์ %s\n"
#: ../src/prefs.c:1591
#: ../src/prefs.c:1599
#, c-format
msgid ""
"%d stored in GConf key %s is not a reasonable number of workspaces, current "
"maximum is %d\n"
msgstr "%d ใน GConf คีย์ %s ไม่ใช่จำนวนพื้นที่ทำงานที่สมเหตุสมผล สามารถตั้งได้มากสุดเป็น %d\n"
#: ../src/prefs.c:1651
#: ../src/prefs.c:1659
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -2241,24 +2272,24 @@ msgstr ""
"ปิดการแก้ขัดที่เตรียมไว้สำหรับโปรแกรมเสียๆ บางโปรแกรมแล้ว "
"ซึ่งอาจทำให้โปรแกรมเหล่านี้ทำงานไม่ปกติ\n"
#: ../src/prefs.c:1724
#: ../src/prefs.c:1732
#, c-format
msgid "%d stored in GConf key %s is out of range 0 to %d\n"
msgstr "%d ใน GConf คีย์ %s ต้องอยู่ระหว่าง 0 และ %d\n"
#: ../src/prefs.c:1873
#: ../src/prefs.c:1881
#, c-format
msgid "Error setting number of workspaces to %d: %s\n"
msgstr "ไม่สามารถตั้งจำนวนพื้นที่ทำงานเป็น %d: %s\n"
#: ../src/prefs.c:2268 ../src/prefs.c:2438
#: ../src/prefs.c:2276 ../src/prefs.c:2446
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
"\"%s\"\n"
msgstr "\"%s\" ที่พบในฐานข้อมูลค่าปรับแต่ง ไม่สามารถใช้เป็นปุ่มลัด \"%s\"\n"
#: ../src/prefs.c:2854
#: ../src/prefs.c:2861
#, c-format
msgid "Error setting name for workspace %d to \"%s\": %s\n"
msgstr "ไม่สามารถตั้งชื่อพื้นที่ทำงาน %d เป็น %s: %s\n"
@@ -2329,6 +2360,7 @@ msgid "Failed to parse saved session file: %s\n"
msgstr "ไม่เข้าใจแฟ้มวาระที่บันทึกไว้: %s\n"
#: ../src/session.c:1159
#, c-format
msgid "<metacity_session> attribute seen but we already have the session ID"
msgstr "พบแอตทริบิวต์ <metacity_session> แต่ว่ามี ID วาระอยู่แล้ว"
@@ -2338,6 +2370,7 @@ msgid "Unknown attribute %s on <metacity_session> element"
msgstr "ไม่รู้จักแอตทริบิวต์ %s ในอีลิเมนต์ <metacity_session>"
#: ../src/session.c:1189
#, c-format
msgid "nested <window> tag"
msgstr "มีแท็ก <window> ซ้อนด้านใน"
@@ -3020,6 +3053,7 @@ msgid "%g milliseconds to draw one window frame"
msgstr "ใช้เวลา %g มิลลิวินาทีในการวาดหนึ่งเฟรมหน้าต่าง"
#: ../src/theme-viewer.c:797
#, c-format
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
msgstr "วิธีใช้: metacity-theme-viewer [ชื่อชุดตกแต่ง]\n"
@@ -3136,14 +3170,16 @@ msgid "Button aspect ratio %g is not reasonable"
msgstr "ค่า aspect ratio %g ของปุ่มไม่สมเหตุสมผล"
#: ../src/theme.c:294
#, c-format
msgid "Frame geometry does not specify size of buttons"
msgstr "ค่าเรขาคณิตของเฟรมไม่ได้ระบุขนาดของปุ่ม"
#: ../src/theme.c:928
#: ../src/theme.c:925
#, c-format
msgid "Gradients should have at least two colors"
msgstr "การไล่สีควรใช้อย่างน้อยสองสี"
#: ../src/theme.c:1054
#: ../src/theme.c:1051
#, c-format
msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
@@ -3152,7 +3188,7 @@ msgstr ""
"การกำหนดสี GTK ต้องเขียนสถานะในวงเล็บเหลี่ยม เช่น gtk:fg[NORMAL] เมื่อ NORMAL "
"เป็นสถานะ; ไม่สามารถแจงค่า \"%s\""
#: ../src/theme.c:1068
#: ../src/theme.c:1065
#, c-format
msgid ""
"GTK color specification must have a close bracket after the state, e.g. gtk:"
@@ -3161,17 +3197,17 @@ msgstr ""
"การกำหนดสี·GTK·ต้องมีวงเล็บเหลี่ยมปิดหลังสถานะด้วย·เช่น·gtk:fg[NORMAL]"
"·เมื่อ·NORMAL·เป็นสถานะ;·ไม่สามารถแจงค่า·\"%s\""
#: ../src/theme.c:1079
#: ../src/theme.c:1076
#, c-format
msgid "Did not understand state \"%s\" in color specification"
msgstr "ไม่เข้าใจสถานะ \"%s\" ในการระบุสี"
#: ../src/theme.c:1092
#: ../src/theme.c:1089
#, c-format
msgid "Did not understand color component \"%s\" in color specification"
msgstr "ไม่เข้าใจองค์ประกอบ \"%s\" ในการระบุสี"
#: ../src/theme.c:1122
#: ../src/theme.c:1119
#, c-format
msgid ""
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
@@ -3179,89 +3215,94 @@ msgid ""
msgstr ""
"รูปแบบการเกลี่ยสีคือ \"blend/bg_color/fg_color/alpha\", ค่า \"%s\" ไม่ตรงกับรูปแบบ"
#: ../src/theme.c:1133
#: ../src/theme.c:1130
#, c-format
msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "ไม่สามารถแจงค่าอัลฟา \"%s\" ในการเกลี่ยสี"
#: ../src/theme.c:1143
#: ../src/theme.c:1140
#, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr "ค่าอัลฟา \"%s\" ในการเกลี่ยสีไม่อยู่ระหว่าง 0.0 และ 1.0"
#: ../src/theme.c:1190
#: ../src/theme.c:1187
#, c-format
msgid ""
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
msgstr "รูปแบบของเฉดสีคือ \"shade/base_color/factor \", \"%s\" ไม่ตรงกับรูปแบบ"
#: ../src/theme.c:1201
#: ../src/theme.c:1198
#, c-format
msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "ไม่สามารถแจงค่าตัวคูณของเฉด \"%s\" ในเฉดสี"
#: ../src/theme.c:1211
#: ../src/theme.c:1208
#, c-format
msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "ตัวคูณเฉดสี \"%s\" ในเฉดสีเป็นค่าลบ"
#: ../src/theme.c:1240
#: ../src/theme.c:1237
#, c-format
msgid "Could not parse color \"%s\""
msgstr "ไม่เข้าใจสี \"%s\""
#: ../src/theme.c:1499
#: ../src/theme.c:1496
#, c-format
msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "นิพจน์พิกัดมีอักขระ'%s' ซึ่งไม่อนุญาตให้ใช้"
#: ../src/theme.c:1526
#: ../src/theme.c:1523
#, c-format
msgid ""
"Coordinate expression contains floating point number '%s' which could not be "
"parsed"
msgstr "นิพจน์พิกัดมีเลขจุดทศนิยม '%s'·ที่แจงค่าไม่ได้"
#: ../src/theme.c:1540
#: ../src/theme.c:1537
#, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr "นิพจน์พิกัดมีเลขจำนวนเต็ม·'%s' ที่แจงค่าไม่ได้"
#: ../src/theme.c:1607
#: ../src/theme.c:1604
#, c-format
msgid ""
"Coordinate expression contained unknown operator at the start of this text: "
"\"%s\""
msgstr "นิพจน์พิกัดมีเครื่องหมายดำเนินการที่ไม่รู้จัก เริ่มจากตำแหน่ง·\"%s\""
#: ../src/theme.c:1664
#: ../src/theme.c:1661
#, c-format
msgid "Coordinate expression was empty or not understood"
msgstr "นิพจน์พิกัดว่างเปล่าหรือไม่สามารถเข้าใจ"
#: ../src/theme.c:1801 ../src/theme.c:1811 ../src/theme.c:1845
#: ../src/theme.c:1798 ../src/theme.c:1808 ../src/theme.c:1842
#, c-format
msgid "Coordinate expression results in division by zero"
msgstr "นิพจน์พิกัดมีผลลัพธ์ที่เป็นการหารด้วยศูนย์"
#: ../src/theme.c:1853
#: ../src/theme.c:1850
#, c-format
msgid ""
"Coordinate expression tries to use mod operator on a floating-point number"
msgstr "นิพจน์พิกัดพยายามใช้ตัวดำเนินการ mod กับตัวเลขจุดทศนิยม"
#: ../src/theme.c:1909
#: ../src/theme.c:1906
#, c-format
msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected"
msgstr "นิพจน์พิกัดมีตัวดำเนินการ\"%s\" ในที่ที่ควรจะเป็นตัวถูกดำเนินการ"
#: ../src/theme.c:1918
#: ../src/theme.c:1915
#, c-format
msgid "Coordinate expression had an operand where an operator was expected"
msgstr "นิพจน์พิกัดมีตัวถูกดำเนินการในที่ที่ควรจะเป็นตัวดำเนินการ"
#: ../src/theme.c:1926
#: ../src/theme.c:1923
#, c-format
msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "นิพจน์พิกัดจบด้วยตัวดำเนินการแทนที่จะเป็นตัวถูกดำเนินการ"
#: ../src/theme.c:1936
#: ../src/theme.c:1933
#, c-format
msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@@ -3269,33 +3310,37 @@ msgid ""
msgstr ""
"นิพจน์พิกัดมีตัวดำเนินการ\"%c\" ตามหลังตัวดำเนินการ \"%c\" โดยไม่มีตัวถูกดำเนินการคั่นกลาง"
#: ../src/theme.c:2054
#: ../src/theme.c:2051
#, c-format
msgid "Coordinate expression parser overflowed its buffer."
msgstr "ตัวแจงค่านิพจน์พิกัดทำข้อมูลล้น"
#: ../src/theme.c:2083
#: ../src/theme.c:2080
#, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr "นิพจน์พิกัดมีวงเล็บปิดโดยไม่มีวงเล็บเปิด"
#: ../src/theme.c:2145
#: ../src/theme.c:2142
#, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr "นิพจน์พิกัดมีตัวแปรหรือค่าคงที่ \"%s\" ที่ไม่รู้จัก"
#: ../src/theme.c:2200
#: ../src/theme.c:2197
#, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr "นิพจน์พิกัดมีวงเล็บเปิดโดยไม่มีวงเล็บปิด"
#: ../src/theme.c:2211
#: ../src/theme.c:2208
#, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr "นิพจน์พิกัดท่าทางจะไม่มีตัวดำเนินการหรือตัวถูกดำเนินการเลย"
#: ../src/theme.c:2452 ../src/theme.c:2474 ../src/theme.c:2495
#: ../src/theme.c:2449 ../src/theme.c:2471 ../src/theme.c:2492
#, c-format
msgid "Theme contained an expression \"%s\" that resulted in an error: %s\n"
msgstr "ชุดตกแต่งมีนิพจน์ \"%s\" ซึ่งทำให้เกิดข้อผิดพลาด: %s\n"
#: ../src/theme.c:3949
#: ../src/theme.c:3946
#, c-format
msgid ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
@@ -3304,25 +3349,25 @@ msgstr ""
"ต้องระบุ <button function =\"%s\" state=\"%s\" draw_ops=\"อะไรก็ตามแต่\"/> "
"สำหรับรูปแบบเฟรมด้วย"
#: ../src/theme.c:4425 ../src/theme.c:4450
#: ../src/theme.c:4422 ../src/theme.c:4447
#, c-format
msgid ""
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr ""
"ขาด <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"อะไรก็ตามแต่\"/>"
#: ../src/theme.c:4496
#: ../src/theme.c:4493
#, c-format
msgid "Failed to load theme \"%s\": %s\n"
msgstr "โหลดชุดตกแต่ง \"%s\" ล้มเหลว: %s\n"
#: ../src/theme.c:4606 ../src/theme.c:4613 ../src/theme.c:4620
#: ../src/theme.c:4627 ../src/theme.c:4634
#: ../src/theme.c:4603 ../src/theme.c:4610 ../src/theme.c:4617
#: ../src/theme.c:4624 ../src/theme.c:4631
#, c-format
msgid "No <%s> set for theme \"%s\""
msgstr "ไม่ได้กำหนดค่า <%s> สำหรับชุดตกแต่ง \"%s\""
#: ../src/theme.c:4642
#: ../src/theme.c:4639
#, c-format
msgid ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
@@ -3331,13 +3376,13 @@ msgstr ""
"ไม่ได้กำหนดรูปแบบเฟรมสำหรับชนิดหน้าต่าง \"%s\" ในชุดตกแต่ง \"%s\", กรุณาเพิ่มอีลิเมนต์ "
"<window type=\"%s\" style_set=\"อะไรก็ตามแต่\"/>"
#: ../src/theme.c:5009 ../src/theme.c:5071 ../src/theme.c:5134
#: ../src/theme.c:5006 ../src/theme.c:5068 ../src/theme.c:5131
#, c-format
msgid ""
"User-defined constants must begin with a capital letter; \"%s\" does not"
msgstr "ค่าคงที่ที่ผู้ใช้กำหนดเองต้องเริ่มต้นด้วยอักษรตัวใหญ่; แต่ \"%s\" ไม่ได้เป็นตามนั้น"
#: ../src/theme.c:5017 ../src/theme.c:5079 ../src/theme.c:5142
#: ../src/theme.c:5014 ../src/theme.c:5076 ../src/theme.c:5139
#, c-format
msgid "Constant \"%s\" has already been defined"
msgstr "ค่าคงที่ \"%s\" ถูกกำหนดไว้แล้ว"
@@ -3383,13 +3428,13 @@ msgstr "โปรแกรมประยุกต์ตั้งค่า _NET_
msgid "%s (on %s)"
msgstr "%s (ที่เครื่อง %s)"
#: ../src/window-props.c:1405
#: ../src/window-props.c:1406
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "ค่า WM_TRANSIENT_FOR หน้าต่าง 0x%lx ที่กำหนดให้กับ %s ใช้ไม่ได้\n"
#. first time through
#: ../src/window.c:5532
#: ../src/window.c:5540
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -3405,7 +3450,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/window.c:6141
#: ../src/window.c:6105
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
@@ -3441,6 +3486,22 @@ msgid ""
msgstr ""
"คุณสมบัติ %s ของหน้าต่าง 0x%lx มีค่าที่ไม่ใช่ UTF-8 ที่ถูกต้องสำหรับหัวข้อที่ %d ในรายการ\n"
#~ msgid ""
#~ "Many actions (e.g. clicking in the client area, moving or resizing the "
#~ "window) normally raise the window as a side-effect. Set this option to "
#~ "false to decouple raising from other user actions. Even when this option "
#~ "is false, windows can still be raised by an alt-left-click anywhere on "
#~ "the window, a normal click on the window decorations, or by special "
#~ "messages, such as activation requests from pagers. This option is "
#~ "currently disabled in click-to-focus mode."
#~ msgstr ""
#~ "โดยปกติ ปฏิบัติการหลายอย่าง (เช่น การคลิกบนพื้นที่ภายในหน้าต่าง "
#~ "การย้ายหรือปรับขนาดหน้าต่าง) จะยกหน้าต่างขึ้นด้วย ถ้ากำหนดตัวเลือกนี้เป็นเท็จ "
#~ "จะไม่ยกหน้าต่างเมื่อมีปฏิสัมพันธ์กับผู้ใช้ แต่ยังสามารถยกขึ้นได้โดย alt-คลิกซ้าย "
#~ "ภายในพื้นที่หน้าต่าง หรือคลิกแบบธรรมดาที่กรอบหน้าต่าง หรือโดยข้อความพิเศษ "
#~ "เช่นการร้องขอกระตุ้นหน้าต่างจากโปรแกรมจัดหน้าพื้นโต๊ะ ขณะนี้ "
#~ "ตัวเลือกนี้จะไม่มีผลถ้าอยู่ในโหมดโฟกัสด้วยการคลิก"
#~ msgid "On _Top"
#~ msgstr "_บนสุด"

955
po/uk.po

File diff suppressed because it is too large Load Diff

1149
po/vi.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -151,6 +151,9 @@
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_windows" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_group" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_panels" />

View File

@@ -163,7 +163,7 @@ schema_DATA = $(schema_in_files:.schemas.in=.schemas)
@INTLTOOL_XML_NOMERGE_RULE@
xmldir = $(datadir)/control-center/keybindings
xmldir = @GNOME_KEYBINDINGS_KEYSDIR@
xml_in_files = 50-metacity-desktop-key.xml.in 50-metacity-key.xml.in
xml_DATA = $(xml_in_files:.xml.in=.xml)

View File

@@ -42,7 +42,7 @@
*/
static MetaWindow *
get_window (Display *xdisplay,
Window frame_xwindow)
Window frame_xwindow)
{
MetaDisplay *display;
MetaWindow *window;
@@ -60,125 +60,156 @@ get_window (Display *xdisplay,
}
void
meta_core_get_client_size (Display *xdisplay,
Window frame_xwindow,
int *width,
int *height)
meta_core_get (Display *xdisplay,
Window xwindow,
...)
{
MetaWindow *window = get_window (xdisplay, frame_xwindow);
if (width)
*width = window->rect.width;
if (height)
*height = window->rect.height;
}
va_list args;
MetaCoreGetType request;
gboolean
meta_core_window_has_frame (Display *xdisplay,
Window frame_xwindow)
{
MetaDisplay *display;
MetaWindow *window;
display = meta_display_for_x_display (xdisplay);
window = meta_display_lookup_x_window (display, frame_xwindow);
MetaDisplay *display = meta_display_for_x_display (xdisplay);
MetaWindow *window = meta_display_lookup_x_window (display, xwindow);
return window != NULL && window->frame != NULL;
}
va_start (args, xwindow);
gboolean
meta_core_titlebar_is_onscreen (Display *xdisplay,
Window frame_xwindow)
{
MetaWindow *window = get_window (xdisplay, frame_xwindow);
request = va_arg (args, MetaCoreGetType);
return meta_window_titlebar_is_onscreen (window);
}
/* Now, we special-case the first request slightly. Mostly, requests
* for information on windows which have no frame are errors.
* But sometimes we may want to know *whether* a window has a frame.
* In this case, pass the key META_CORE_WINDOW_HAS_FRAME
* as the *first* request, with a pointer to a boolean; if the window
* has no frame, this will be set to False and meta_core_get will
* exit immediately (so the values of any other requests will be
* undefined). Otherwise it will be set to True and meta_core_get will
* continue happily on its way.
*/
Window
meta_core_get_client_xwindow (Display *xdisplay,
Window frame_xwindow)
{
MetaWindow *window = get_window (xdisplay, frame_xwindow);
if (request != META_CORE_WINDOW_HAS_FRAME &&
(window == NULL || window->frame == NULL)) {
meta_bug ("No such frame window 0x%lx!\n", xwindow);
return;
}
return window->xwindow;
}
while (request != META_CORE_GET_END) {
gpointer answer = va_arg (args, gpointer);
MetaFrameFlags
meta_core_get_frame_flags (Display *xdisplay,
Window frame_xwindow)
{
MetaWindow *window = get_window (xdisplay, frame_xwindow);
return meta_frame_get_flags (window->frame);
}
switch (request) {
case META_CORE_WINDOW_HAS_FRAME:
*((gboolean*)answer) = window != NULL && window->frame != NULL;
if (!*((gboolean*)answer)) return; /* see above */
break;
case META_CORE_GET_CLIENT_WIDTH:
*((gint*)answer) = window->rect.width;
break;
case META_CORE_GET_CLIENT_HEIGHT:
*((gint*)answer) = window->rect.height;
break;
case META_CORE_IS_TITLEBAR_ONSCREEN:
*((gboolean*)answer) = meta_window_titlebar_is_onscreen (window);
break;
case META_CORE_GET_CLIENT_XWINDOW:
*((Window*)answer) = window->xwindow;
break;
case META_CORE_GET_FRAME_FLAGS:
*((MetaFrameFlags*)answer) = meta_frame_get_flags (window->frame);
break;
case META_CORE_GET_FRAME_TYPE:
{
MetaFrameType base_type = META_FRAME_TYPE_LAST;
MetaFrameType
meta_core_get_frame_type (Display *xdisplay,
Window frame_xwindow)
{
MetaWindow *window;
MetaFrameType base_type;
switch (window->type)
{
case META_WINDOW_NORMAL:
base_type = META_FRAME_TYPE_NORMAL;
break;
window = get_window (xdisplay, frame_xwindow);
case META_WINDOW_DIALOG:
base_type = META_FRAME_TYPE_DIALOG;
break;
base_type = META_FRAME_TYPE_LAST;
switch (window->type)
{
case META_WINDOW_NORMAL:
base_type = META_FRAME_TYPE_NORMAL;
break;
case META_WINDOW_DIALOG:
base_type = META_FRAME_TYPE_DIALOG;
break;
case META_WINDOW_MODAL_DIALOG:
base_type = META_FRAME_TYPE_MODAL_DIALOG;
break;
case META_WINDOW_MENU:
base_type = META_FRAME_TYPE_MENU;
break;
case META_WINDOW_MODAL_DIALOG:
base_type = META_FRAME_TYPE_MODAL_DIALOG;
break;
case META_WINDOW_UTILITY:
base_type = META_FRAME_TYPE_UTILITY;
break;
case META_WINDOW_DESKTOP:
case META_WINDOW_DOCK:
case META_WINDOW_TOOLBAR:
case META_WINDOW_SPLASHSCREEN:
/* No frame */
base_type = META_FRAME_TYPE_LAST;
break;
case META_WINDOW_MENU:
base_type = META_FRAME_TYPE_MENU;
break;
case META_WINDOW_UTILITY:
base_type = META_FRAME_TYPE_UTILITY;
break;
case META_WINDOW_DESKTOP:
case META_WINDOW_DOCK:
case META_WINDOW_TOOLBAR:
case META_WINDOW_SPLASHSCREEN:
/* No frame */
base_type = META_FRAME_TYPE_LAST;
break;
}
if (base_type == META_FRAME_TYPE_LAST)
{
/* can't add border if undecorated */
*((MetaFrameType*)answer) = META_FRAME_TYPE_LAST;
}
else if (window->border_only)
{
/* override base frame type */
*((MetaFrameType*)answer) = META_FRAME_TYPE_BORDER;
}
else
{
*((MetaFrameType*)answer) = base_type;
}
break;
}
case META_CORE_GET_MINI_ICON:
*((GdkPixbuf**)answer) = window->mini_icon;
break;
case META_CORE_GET_ICON:
*((GdkPixbuf**)answer) = window->icon;
break;
case META_CORE_GET_X:
meta_window_get_position (window, (int*)answer, NULL);
break;
case META_CORE_GET_Y:
meta_window_get_position (window, NULL, (int*)answer);
break;
case META_CORE_GET_FRAME_WORKSPACE:
*((gint*)answer) = meta_window_get_net_wm_desktop (window);
break;
case META_CORE_GET_FRAME_X:
*((gint*)answer) = window->frame->rect.x;
break;
case META_CORE_GET_FRAME_Y:
*((gint*)answer) = window->frame->rect.y;
break;
case META_CORE_GET_FRAME_WIDTH:
*((gint*)answer) = window->frame->rect.width;
break;
case META_CORE_GET_FRAME_HEIGHT:
*((gint*)answer) = window->frame->rect.height;
break;
case META_CORE_GET_SCREEN_WIDTH:
*((gint*)answer) = window->screen->rect.width;
break;
case META_CORE_GET_SCREEN_HEIGHT:
*((gint*)answer) = window->screen->rect.height;
break;
default:
meta_warning(_("Unknown window information request: %d"), request);
}
if (base_type == META_FRAME_TYPE_LAST)
return META_FRAME_TYPE_LAST; /* can't add border if undecorated */
else if (window->border_only)
return META_FRAME_TYPE_BORDER; /* override base frame type */
else
return base_type;
}
request = va_arg (args, MetaCoreGetType);
}
GdkPixbuf*
meta_core_get_mini_icon (Display *xdisplay,
Window frame_xwindow)
{
MetaWindow *window = get_window (xdisplay, frame_xwindow);
return window->mini_icon;
}
GdkPixbuf*
meta_core_get_icon (Display *xdisplay,
Window frame_xwindow)
{
MetaWindow *window = get_window (xdisplay, frame_xwindow);
return window->icon;
va_end (args);
}
void
@@ -187,7 +218,7 @@ meta_core_queue_frame_resize (Display *xdisplay,
{
MetaWindow *window = get_window (xdisplay, frame_xwindow);
meta_window_queue_move_resize (window);
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
}
void
@@ -275,32 +306,6 @@ meta_core_user_focus (Display *xdisplay,
meta_window_focus (window, timestamp);
}
void
meta_core_get_position (Display *xdisplay,
Window frame_xwindow,
int *x,
int *y)
{
MetaWindow *window = get_window (xdisplay, frame_xwindow);
meta_window_get_position (window, x, y);
}
void
meta_core_get_size (Display *xdisplay,
Window frame_xwindow,
int *width,
int *height)
{
MetaWindow *window = get_window (xdisplay, frame_xwindow);
if (width)
*width = window->rect.width;
if (height)
*height = window->rect.height;
}
void
meta_core_minimize (Display *xdisplay,
Window frame_xwindow)
@@ -451,36 +456,6 @@ meta_core_get_active_workspace (Screen *xscreen)
return meta_workspace_index (screen->active_workspace);
}
int
meta_core_get_frame_workspace (Display *xdisplay,
Window frame_xwindow)
{
MetaWindow *window = get_window (xdisplay, frame_xwindow);
return meta_window_get_net_wm_desktop (window);
}
void
meta_core_get_frame_extents (Display *xdisplay,
Window frame_xwindow,
int *x,
int *y,
int *width,
int *height)
{
MetaWindow *window = get_window (xdisplay, frame_xwindow);
if (x)
*x = window->frame->rect.x;
if (y)
*y = window->frame->rect.y;
if (width)
*width = window->frame->rect.width;
if (height)
*height = window->frame->rect.height;
}
void
meta_core_show_window_menu (Display *xdisplay,
Window frame_xwindow,
@@ -730,20 +705,6 @@ meta_core_set_screen_cursor (Display *xdisplay,
meta_frame_set_screen_cursor (window->frame, cursor);
}
void
meta_core_get_screen_size (Display *xdisplay,
Window frame_on_screen,
int *width,
int *height)
{
MetaWindow *window = get_window (xdisplay, frame_on_screen);
if (width)
*width = window->screen->rect.width;
if (height)
*height = window->screen->rect.height;
}
void
meta_core_increment_event_serial (Display *xdisplay)
{

View File

@@ -29,30 +29,68 @@
#include <gdk/gdkx.h>
#include "common.h"
void meta_core_get_client_size (Display *xdisplay,
Window frame_xwindow,
int *width,
int *height);
typedef enum
{
META_CORE_GET_END = 0,
META_CORE_WINDOW_HAS_FRAME,
META_CORE_GET_CLIENT_WIDTH,
META_CORE_GET_CLIENT_HEIGHT,
META_CORE_IS_TITLEBAR_ONSCREEN,
META_CORE_GET_CLIENT_XWINDOW,
META_CORE_GET_FRAME_FLAGS,
META_CORE_GET_FRAME_TYPE,
META_CORE_GET_MINI_ICON,
META_CORE_GET_ICON,
META_CORE_GET_X,
META_CORE_GET_Y,
META_CORE_GET_FRAME_WORKSPACE,
META_CORE_GET_FRAME_X,
META_CORE_GET_FRAME_Y,
META_CORE_GET_FRAME_WIDTH,
META_CORE_GET_FRAME_HEIGHT,
META_CORE_GET_SCREEN_WIDTH,
META_CORE_GET_SCREEN_HEIGHT,
} MetaCoreGetType;
gboolean meta_core_titlebar_is_onscreen (Display *xdisplay,
Window frame_xwindow);
gboolean meta_core_window_has_frame (Display *xdisplay,
Window frame_xwindow);
Window meta_core_get_client_xwindow (Display *xdisplay,
Window frame_xwindow);
MetaFrameFlags meta_core_get_frame_flags (Display *xdisplay,
Window frame_xwindow);
MetaFrameType meta_core_get_frame_type (Display *xdisplay,
Window frame_xwindow);
GdkPixbuf* meta_core_get_mini_icon (Display *xdisplay,
Window frame_xwindow);
GdkPixbuf* meta_core_get_icon (Display *xdisplay,
Window frame_xwindow);
/* General information function about the given window. Pass in a sequence of
* pairs of MetaCoreGetTypes and pointers to variables; the variables will be
* filled with the requested values. End the list with META_CORE_GET_END.
* For example:
*
* meta_core_get (my_display, my_window,
* META_CORE_GET_X, &x,
* META_CORE_GET_Y, &y,
* META_CORE_GET_END);
*
* If the window doesn't have a frame, this will raise a meta_bug. To suppress
* this behaviour, ask META_CORE_WINDOW_HAS_FRAME as the *first* question in
* the list. If the window has no frame, the answer to this question will be
* False, and anything else you asked will be undefined. Otherwise, the answer
* will be True. The answer will necessarily be True if you ask the question
* in any other position. The positions of all other questions don't matter.
*
* The reason for this function is that some parts of the program don't know
* about MetaWindows. But they *can* see core.h. So we used to have a whole
* load of functions which took a display and an X window, looked up the
* relevant MetaWindow, and returned information about it. The trouble with
* that is that looking up the MetaWindow is a nontrivial operation, and
* consolidating the calls in this way makes (for example) frame exposes
* 33% faster, according to valgrind.
*
* This function would perhaps be slightly better if the questions were
* represented by pointers, perhaps gchar*s, because then we could take
* advantage of gcc's automatic sentinel checking. On the other hand, this
* immediately suggests string comparison, and that's slow.
*
* Another possible improvement is that core.h still has a bunch of
* functions which can't be described by the formula "give a display and
* an X window, get a single value" (meta_core_user_move, for example), but
* which could theoretically be handled by this function if we relaxed the
* requirement that all questions should have exactly one argument.
*/
void meta_core_get (Display *xdisplay,
Window window,
...);
void meta_core_queue_frame_resize (Display *xdisplay,
Window frame_xwindow);
@@ -78,17 +116,6 @@ void meta_core_user_focus (Display *xdisplay,
Window frame_xwindow,
guint32 timestamp);
/* get position of client, same coord space expected by move */
void meta_core_get_position (Display *xdisplay,
Window frame_xwindow,
int *x,
int *y);
void meta_core_get_size (Display *xdisplay,
Window frame_xwindow,
int *width,
int *height);
void meta_core_minimize (Display *xdisplay,
Window frame_xwindow);
void meta_core_toggle_maximize (Display *xdisplay,
@@ -126,14 +153,6 @@ const char* meta_core_get_workspace_name_with_index (Display *xdisplay,
Window xroot,
int index);
void meta_core_get_frame_extents (Display *xdisplay,
Window frame_xwindow,
int *x,
int *y,
int *width,
int *height);
void meta_core_show_window_menu (Display *xdisplay,
Window frame_xwindow,
int root_x,
@@ -170,11 +189,6 @@ void meta_core_set_screen_cursor (Display *xdisplay,
Window frame_on_screen,
MetaCursor cursor);
void meta_core_get_screen_size (Display *xdisplay,
Window frame_on_screen,
int *width,
int *height);
/* Used because we ignore EnterNotify when a window is unmapped that
* really shouldn't cause focus changes, by comparing the event serial
* of the EnterNotify and the UnmapNotify.

View File

@@ -306,6 +306,7 @@ delete_ping_timeout_func (MetaDisplay *display,
char numbuf[32];
char timestampbuf[32];
char *window_id_str;
char *window_title;
GIOChannel *channel;
meta_topic (META_DEBUG_PING,
@@ -319,6 +320,7 @@ delete_ping_timeout_func (MetaDisplay *display,
}
window_id_str = g_strdup_printf ("0x%lx", window->xwindow);
window_title = g_locale_from_utf8 (window->title, -1, NULL, NULL, NULL);
sprintf (numbuf, "%d", window->screen->number);
sprintf (timestampbuf, "%u", timestamp);
@@ -329,7 +331,7 @@ delete_ping_timeout_func (MetaDisplay *display,
argv[3] = "--timestamp";
argv[4] = timestampbuf;
argv[5] = "--kill-window-question";
argv[6] = window->title;
argv[6] = window_title;
argv[7] = window_id_str;
argv[8] = NULL;
@@ -362,6 +364,7 @@ delete_ping_timeout_func (MetaDisplay *display,
g_io_channel_unref (channel);
out:
g_free (window_title);
g_free (window_id_str);
}

View File

@@ -1542,7 +1542,7 @@ event_callback (XEvent *event,
{
window->frame->need_reapply_frame_shape = TRUE;
meta_warning("from event callback\n");
meta_window_queue_move_resize (window);
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
}
}
}
@@ -3905,7 +3905,7 @@ meta_display_queue_retheme_all_windows (MetaDisplay *display)
{
MetaWindow *window = tmp->data;
meta_window_queue_move_resize (window);
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
if (window->frame)
{
window->frame->need_reapply_frame_shape = TRUE;

View File

@@ -69,6 +69,8 @@ typedef struct
MetaRectangle icon_rect;
} MetaMinimizeEffect, MetaUnminimizeEffect;
#if 0
/* Solaris abhors an empty struct. #397296. */
typedef struct
{
@@ -77,6 +79,7 @@ typedef struct
typedef struct
{
} MetaFocusEffect;
#endif
struct MetaEffect
{
@@ -88,8 +91,11 @@ struct MetaEffect
{
MetaMinimizeEffect minimize;
MetaUnminimizeEffect unminimize;
#if 0
/* These don't currently exist, so we aren't using them. #397296. */
MetaCloseEffect close;
MetaFocusEffect focus;
#endif
} u;
MetaEffectPriv *priv;

View File

@@ -223,7 +223,7 @@ meta_window_destroy_frame (MetaWindow *window)
g_free (frame);
/* Put our state back where it should be */
meta_window_queue_calc_showing (window);
meta_window_queue (window, META_QUEUE_CALC_SHOWING);
}

View File

@@ -73,8 +73,8 @@ static void meta_frames_paint_to_drawable (MetaFrames *frames,
MetaUIFrame *frame,
GdkDrawable *drawable,
GdkRegion *region,
int x_offset,
int y_offset);
int x_offset,
int y_offset);
static void meta_frames_set_window_background (MetaFrames *frames,
MetaUIFrame *frame);
@@ -102,7 +102,7 @@ static MetaFrameControl get_control (MetaFrames *frames,
static void clear_tip (MetaFrames *frames);
static void invalidate_all_caches (MetaFrames *frames);
static void invalidate_whole_window (MetaFrames *frames,
MetaUIFrame *frame);
MetaUIFrame *frame);
static GtkWidgetClass *parent_class = NULL;
@@ -115,12 +115,12 @@ meta_frames_get_type (void)
{
static const GtkTypeInfo frames_info =
{
"MetaFrames",
sizeof (MetaFrames),
sizeof (MetaFramesClass),
(GtkClassInitFunc) meta_frames_class_init,
(GtkObjectInitFunc) meta_frames_init,
/* reserved_1 */ NULL,
"MetaFrames",
sizeof (MetaFrames),
sizeof (MetaFramesClass),
(GtkClassInitFunc) meta_frames_class_init,
(GtkObjectInitFunc) meta_frames_init,
/* reserved_1 */ NULL,
/* reserved_2 */ NULL,
(GtkClassInitFunc) NULL,
};
@@ -295,7 +295,7 @@ typedef struct
static CachedPixels *
get_cache (MetaFrames *frames,
MetaUIFrame *frame)
MetaUIFrame *frame)
{
CachedPixels *pixels;
@@ -312,7 +312,7 @@ get_cache (MetaFrames *frames,
static void
invalidate_cache (MetaFrames *frames,
MetaUIFrame *frame)
MetaUIFrame *frame)
{
CachedPixels *pixels = get_cache (frames, frame);
int i;
@@ -447,8 +447,10 @@ meta_frames_ensure_layout (MetaFrames *frames,
widget = GTK_WIDGET (frames);
flags = meta_core_get_frame_flags (gdk_display, frame->xwindow);
type = meta_core_get_frame_type (gdk_display, frame->xwindow);
meta_core_get (gdk_display, frame->xwindow,
META_CORE_GET_FRAME_FLAGS, &flags,
META_CORE_GET_FRAME_TYPE, &type,
META_CORE_GET_END);
style = meta_theme_get_frame_style (meta_theme_get_current (),
type, flags);
@@ -485,7 +487,7 @@ meta_frames_ensure_layout (MetaFrames *frames,
pango_layout_set_auto_dir (frame->layout, FALSE);
font_desc = meta_gtk_widget_get_font_desc (widget, scale,
meta_prefs_get_titlebar_font ());
meta_prefs_get_titlebar_font ());
size = pango_font_description_get_size (font_desc);
@@ -507,7 +509,7 @@ meta_frames_ensure_layout (MetaFrames *frames,
}
pango_layout_set_font_description (frame->layout,
font_desc);
font_desc);
pango_font_description_free (font_desc);
@@ -527,11 +529,12 @@ meta_frames_calc_geometry (MetaFrames *frames,
MetaFrameType type;
MetaButtonLayout button_layout;
meta_core_get_client_size (gdk_display, frame->xwindow,
&width, &height);
flags = meta_core_get_frame_flags (gdk_display, frame->xwindow);
type = meta_core_get_frame_type (gdk_display, frame->xwindow);
meta_core_get (gdk_display, frame->xwindow,
META_CORE_GET_CLIENT_WIDTH, &width,
META_CORE_GET_CLIENT_HEIGHT, &height,
META_CORE_GET_FRAME_FLAGS, &flags,
META_CORE_GET_FRAME_TYPE, &type,
META_CORE_GET_END);
meta_frames_ensure_layout (frames, frame);
@@ -552,17 +555,17 @@ meta_frames_new (int screen_number)
GdkScreen *screen;
screen = gdk_display_get_screen (gdk_display_get_default (),
screen_number);
screen_number);
return g_object_new (META_TYPE_FRAMES,
"screen", screen,
NULL);
"screen", screen,
NULL);
}
void
meta_frames_manage_window (MetaFrames *frames,
Window xwindow,
GdkWindow *window)
GdkWindow *window)
{
MetaUIFrame *frame;
@@ -614,8 +617,8 @@ meta_frames_unmanage_window (MetaFrames *frames,
/* restore the cursor */
meta_core_set_screen_cursor (gdk_display,
frame->xwindow,
META_CURSOR_DEFAULT);
frame->xwindow,
META_CURSOR_DEFAULT);
gdk_window_set_user_data (frame->window, NULL);
@@ -678,8 +681,10 @@ meta_frames_get_geometry (MetaFrames *frames,
if (frame == NULL)
meta_bug ("No such frame 0x%lx\n", xwindow);
flags = meta_core_get_frame_flags (gdk_display, frame->xwindow);
type = meta_core_get_frame_type (gdk_display, frame->xwindow);
meta_core_get (gdk_display, frame->xwindow,
META_CORE_GET_FRAME_FLAGS, &flags,
META_CORE_GET_FRAME_TYPE, &type,
META_CORE_GET_END);
g_return_if_fail (type < META_FRAME_TYPE_LAST);
@@ -914,8 +919,9 @@ meta_frames_apply_shapes (MetaFrames *frames,
&attrs);
/* Copy the client's shape to the temporary shape_window */
client_window = meta_core_get_client_xwindow (gdk_display,
frame->xwindow);
meta_core_get (gdk_display, frame->xwindow,
META_CORE_GET_CLIENT_XWINDOW, &client_window,
META_CORE_GET_END);
XShapeCombineShape (gdk_display, shape_window, ShapeBounding,
fgeom.left_width,
@@ -972,11 +978,11 @@ meta_frames_apply_shapes (MetaFrames *frames,
void
meta_frames_move_resize_frame (MetaFrames *frames,
Window xwindow,
int x,
int y,
int width,
int height)
Window xwindow,
int x,
int y,
int width,
int height)
{
MetaUIFrame *frame = meta_frames_lookup_window (frames, xwindow);
int old_x, old_y, old_width, old_height;
@@ -1145,7 +1151,7 @@ show_tip_now (MetaFrames *frames)
screen_number = gdk_screen_get_number (gtk_widget_get_screen (GTK_WIDGET (frames)));
meta_fixed_tip_show (gdk_display,
screen_number,
screen_number,
rect->x + dx,
rect->y + rect->height + 2 + dy,
tiptext);
@@ -1213,7 +1219,9 @@ meta_frame_titlebar_event (MetaUIFrame *frame,
{
case META_ACTION_TITLEBAR_TOGGLE_SHADE:
{
flags = meta_core_get_frame_flags (gdk_display, frame->xwindow);
meta_core_get (gdk_display, frame->xwindow,
META_CORE_GET_FRAME_FLAGS, &flags,
META_CORE_GET_END);
if (flags & META_FRAME_ALLOWS_SHADE)
{
@@ -1231,7 +1239,9 @@ meta_frame_titlebar_event (MetaUIFrame *frame,
case META_ACTION_TITLEBAR_TOGGLE_MAXIMIZE:
{
flags = meta_core_get_frame_flags (gdk_display, frame->xwindow);
meta_core_get (gdk_display, frame->xwindow,
META_CORE_GET_FRAME_FLAGS, &flags,
META_CORE_GET_END);
if (flags & META_FRAME_ALLOWS_MAXIMIZE)
{
@@ -1242,7 +1252,9 @@ meta_frame_titlebar_event (MetaUIFrame *frame,
case META_ACTION_TITLEBAR_MINIMIZE:
{
flags = meta_core_get_frame_flags (gdk_display, frame->xwindow);
meta_core_get (gdk_display, frame->xwindow,
META_CORE_GET_FRAME_FLAGS, &flags,
META_CORE_GET_END);
if (flags & META_FRAME_ALLOWS_MINIMIZE)
{
@@ -1329,7 +1341,8 @@ meta_frames_button_press_event (GtkWidget *widget,
/* focus on click, even if click was on client area */
if (event->button == 1 &&
!(control == META_FRAME_CONTROL_MINIMIZE ||
control == META_FRAME_CONTROL_DELETE))
control == META_FRAME_CONTROL_DELETE ||
control == META_FRAME_CONTROL_MAXIMIZE))
{
meta_topic (META_DEBUG_FOCUS,
"Focusing window with frame 0x%lx due to button 1 press\n",
@@ -1440,9 +1453,9 @@ meta_frames_button_press_event (GtkWidget *widget,
dx = event->x_root - event->x;
dy = event->y_root - event->y;
/* Align to the right end of the menu rectangle if RTL */
if (meta_ui_get_direction() == META_UI_DIRECTION_RTL)
dx += rect->width;
/* Align to the right end of the menu rectangle if RTL */
if (meta_ui_get_direction() == META_UI_DIRECTION_RTL)
dx += rect->width;
meta_core_show_window_menu (gdk_display,
frame->xwindow,
@@ -1463,6 +1476,7 @@ meta_frames_button_press_event (GtkWidget *widget,
control == META_FRAME_CONTROL_RESIZE_W))
{
MetaGrabOp op;
gboolean titlebar_is_onscreen;
op = META_GRAB_OP_NONE;
@@ -1497,8 +1511,11 @@ meta_frames_button_press_event (GtkWidget *widget,
break;
}
if (!meta_core_titlebar_is_onscreen (gdk_display,
frame->xwindow))
meta_core_get (gdk_display, frame->xwindow,
META_CORE_IS_TITLEBAR_ONSCREEN, &titlebar_is_onscreen,
META_CORE_GET_END);
if (!titlebar_is_onscreen)
meta_core_show_window_menu (gdk_display,
frame->xwindow,
event->x_root,
@@ -1521,9 +1538,11 @@ meta_frames_button_press_event (GtkWidget *widget,
event->button == 1)
{
MetaFrameFlags flags;
flags = meta_core_get_frame_flags (gdk_display, frame->xwindow);
meta_core_get (gdk_display, frame->xwindow,
META_CORE_GET_FRAME_FLAGS, &flags,
META_CORE_GET_END);
if (flags & META_FRAME_ALLOWS_MOVE)
{
meta_core_begin_grab_op (gdk_display,
@@ -1619,8 +1638,13 @@ meta_frames_button_release_event (GtkWidget *widget,
case META_GRAB_OP_CLICKING_MAXIMIZE:
if (control == META_FRAME_CONTROL_MAXIMIZE)
{
/* Focus the window on the maximize */
meta_core_user_focus (gdk_display,
frame->xwindow,
event->time);
meta_core_maximize (gdk_display, frame->xwindow);
}
meta_core_end_grab_op (gdk_display, event->time);
break;
@@ -1701,8 +1725,8 @@ meta_frames_button_release_event (GtkWidget *widget,
static void
meta_frames_update_prelit_control (MetaFrames *frames,
MetaUIFrame *frame,
MetaFrameControl control)
MetaUIFrame *frame,
MetaFrameControl control)
{
MetaFrameControl old_control;
MetaCursor cursor;
@@ -1875,7 +1899,7 @@ 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, control);
/* No tooltip while in the process of clicking */
}
@@ -1890,7 +1914,7 @@ meta_frames_motion_notify_event (GtkWidget *widget,
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, control);
queue_tip (frames);
}
@@ -1930,8 +1954,8 @@ get_bg_gc (GdkWindow *window, int x_offset, int y_offset)
if (private->bg_pixmap == GDK_PARENT_RELATIVE_BG && private->parent)
{
return get_bg_gc (GDK_WINDOW (private->parent),
x_offset + private->x,
y_offset + private->y);
x_offset + private->x,
y_offset + private->y);
}
else if (private->bg_pixmap &&
private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
@@ -1958,13 +1982,13 @@ get_bg_gc (GdkWindow *window, int x_offset, int y_offset)
static void
clear_backing (GdkPixmap *pixmap,
GdkWindow *window,
int xoffset, int yoffset)
GdkWindow *window,
int xoffset, int yoffset)
{
GdkGC *tmp_gc = get_bg_gc (window, xoffset, yoffset);
gdk_draw_rectangle (pixmap, tmp_gc, TRUE,
0, 0, -1, -1);
0, 0, -1, -1);
g_object_unref (tmp_gc);
}
@@ -1974,7 +1998,7 @@ clear_backing (GdkPixmap *pixmap,
static GdkPixmap *
generate_pixmap (MetaFrames *frames,
MetaUIFrame *frame,
MetaUIFrame *frame,
MetaRectangle rect)
{
GdkRectangle rectangle;
@@ -1994,7 +2018,7 @@ generate_pixmap (MetaFrames *frames,
region = gdk_region_rectangle (&rectangle);
meta_frames_paint_to_drawable (frames, frame, result, region,
- rectangle.x, - rectangle.y);
-rectangle.x, -rectangle.y);
gdk_region_destroy (region);
@@ -2004,22 +2028,26 @@ generate_pixmap (MetaFrames *frames,
static void
populate_cache (MetaFrames *frames,
MetaUIFrame *frame)
MetaUIFrame *frame)
{
int top, bottom, left, right;
int width, height;
int frame_width, frame_height, screen_width, screen_height;
CachedPixels *pixels;
MetaFrameType frame_type;
MetaFrameFlags frame_flags;
int i;
meta_core_get_frame_extents (gdk_display,
frame->xwindow,
NULL, NULL,
&frame_width, &frame_height);
meta_core_get_screen_size (gdk_display,
frame->xwindow,
&screen_width, &screen_height);
meta_core_get (gdk_display, frame->xwindow,
META_CORE_GET_FRAME_WIDTH, &frame_width,
META_CORE_GET_FRAME_HEIGHT, &frame_height,
META_CORE_GET_SCREEN_WIDTH, &screen_width,
META_CORE_GET_SCREEN_HEIGHT, &screen_height,
META_CORE_GET_CLIENT_WIDTH, &width,
META_CORE_GET_CLIENT_HEIGHT, &height,
META_CORE_GET_FRAME_TYPE, &frame_type,
META_CORE_GET_FRAME_FLAGS, &frame_flags,
META_CORE_GET_END);
/* don't cache extremely large windows */
if (frame_width > 2 * screen_width ||
@@ -2029,13 +2057,11 @@ populate_cache (MetaFrames *frames,
}
meta_theme_get_frame_borders (meta_theme_get_current (),
meta_core_get_frame_type (gdk_display, frame->xwindow),
frame->text_height,
meta_core_get_frame_flags (gdk_display, frame->xwindow),
frame_type,
frame->text_height,
frame_flags,
&top, &bottom, &left, &right);
meta_core_get_client_size (gdk_display, frame->xwindow, &width, &height);
pixels = get_cache (frames, frame);
/* Setup the rectangles for the four frame borders. First top, then
@@ -2088,14 +2114,14 @@ clip_to_screen (GdkRegion *region, MetaUIFrame *frame)
* is crucial to handle huge client windows,
* like "xterm -geometry 1000x1000"
*/
meta_core_get_frame_extents (gdk_display,
frame->xwindow,
&frame_area.x, &frame_area.y,
&frame_area.width, &frame_area.height);
meta_core_get_screen_size (gdk_display,
frame->xwindow,
&screen_area.width, &screen_area.height);
meta_core_get (gdk_display, frame->xwindow,
META_CORE_GET_FRAME_X, &frame_area.x,
META_CORE_GET_FRAME_Y, &frame_area.y,
META_CORE_GET_FRAME_WIDTH, &frame_area.width,
META_CORE_GET_FRAME_HEIGHT, &frame_area.height,
META_CORE_GET_SCREEN_WIDTH, &screen_area.height,
META_CORE_GET_SCREEN_HEIGHT, &screen_area.height,
META_CORE_GET_END);
gdk_region_offset (region, frame_area.x, frame_area.y);
@@ -2108,7 +2134,7 @@ clip_to_screen (GdkRegion *region, MetaUIFrame *frame)
static void
subtract_from_region (GdkRegion *region, GdkDrawable *drawable,
gint x, gint y)
gint x, gint y)
{
GdkRectangle rect;
GdkRegion *reg_rect;
@@ -2199,8 +2225,8 @@ meta_frames_paint_to_drawable (MetaFrames *frames,
MetaUIFrame *frame,
GdkDrawable *drawable,
GdkRegion *region,
int x_offset,
int y_offset)
int x_offset,
int y_offset)
{
GtkWidget *widget;
MetaFrameFlags flags;
@@ -2311,13 +2337,14 @@ meta_frames_paint_to_drawable (MetaFrames *frames,
button_states[META_BUTTON_TYPE_RIGHT_RIGHT_BACKGROUND] =
button_states[META_BUTTON_TYPE_CLOSE];
flags = meta_core_get_frame_flags (gdk_display, frame->xwindow);
type = meta_core_get_frame_type (gdk_display, frame->xwindow);
mini_icon = meta_core_get_mini_icon (gdk_display, frame->xwindow);
icon = meta_core_get_icon (gdk_display, frame->xwindow);
meta_core_get_client_size (gdk_display, frame->xwindow,
&w, &h);
meta_core_get (gdk_display, frame->xwindow,
META_CORE_GET_FRAME_FLAGS, &flags,
META_CORE_GET_FRAME_TYPE, &type,
META_CORE_GET_MINI_ICON, &mini_icon,
META_CORE_GET_ICON, &icon,
META_CORE_GET_CLIENT_WIDTH, &w,
META_CORE_GET_CLIENT_HEIGHT, &h,
META_CORE_GET_END);
meta_frames_ensure_layout (frames, frame);
@@ -2339,9 +2366,10 @@ meta_frames_paint_to_drawable (MetaFrames *frames,
type, frame->text_height, flags,
&top, &bottom, &left, &right);
meta_core_get_screen_size (gdk_display,
frame->xwindow,
&screen_width, &screen_height);
meta_core_get (gdk_display, frame->xwindow,
META_CORE_GET_SCREEN_WIDTH, &screen_width,
META_CORE_GET_SCREEN_HEIGHT, &screen_height,
META_CORE_GET_END);
edges = gdk_region_copy (region);
@@ -2432,12 +2460,14 @@ meta_frames_set_window_background (MetaFrames *frames,
MetaFrameStyle *style;
gboolean frame_exists;
frame_exists = meta_core_window_has_frame (gdk_display, frame->xwindow);
meta_core_get (gdk_display, frame->xwindow,
META_CORE_WINDOW_HAS_FRAME, &frame_exists,
META_CORE_GET_FRAME_FLAGS, &flags,
META_CORE_GET_FRAME_TYPE, &type,
META_CORE_GET_END);
if (frame_exists)
{
flags = meta_core_get_frame_flags (gdk_display, frame->xwindow);
type = meta_core_get_frame_type (gdk_display, frame->xwindow);
style = meta_theme_get_frame_style (meta_theme_get_current (),
type, flags);
}
@@ -2613,7 +2643,9 @@ get_control (MetaFrames *frames,
if (POINT_IN_RECT (x, y, fgeom.menu_rect.clickable))
return META_FRAME_CONTROL_MENU;
flags = meta_core_get_frame_flags (gdk_display, frame->xwindow);
meta_core_get (gdk_display, frame->xwindow,
META_CORE_GET_FRAME_FLAGS, &flags,
META_CORE_GET_END);
has_vert = (flags & META_FRAME_ALLOWS_VERTICAL_RESIZE) != 0;
has_horiz = (flags & META_FRAME_ALLOWS_HORIZONTAL_RESIZE) != 0;
@@ -2783,7 +2815,7 @@ meta_frames_pop_delay_exposes (MetaFrames *frames)
static void
invalidate_whole_window (MetaFrames *frames,
MetaUIFrame *frame)
MetaUIFrame *frame)
{
gdk_window_invalidate_rect (frame->window, NULL, FALSE);
invalidate_cache (frames, frame);

View File

@@ -65,7 +65,7 @@ static void
version (void)
{
g_print (_("metacity %s\n"
"Copyright (C) 2001-2002 Havoc Pennington, Red Hat, Inc., and others\n"
"Copyright (C) 2001-2007 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"),
VERSION);
@@ -293,15 +293,16 @@ main (int argc, char **argv)
g_type_init ();
/* Load prefs */
meta_prefs_init ();
meta_prefs_add_listener (prefs_changed_callback, NULL);
meta_ui_init (&argc, &argv);
/* must be after UI init so we can override GDK handlers */
meta_errors_init ();
/* Load prefs */
meta_prefs_init ();
meta_prefs_add_listener (prefs_changed_callback, NULL);
#if 1
g_log_set_handler (NULL,
G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION,

View File

@@ -44,6 +44,7 @@ typedef enum
MENU_ITEM_IMAGE,
MENU_ITEM_CHECKBOX,
MENU_ITEM_RADIOBUTTON,
MENU_ITEM_WORKSPACE_LIST,
} MetaMenuItemType;
struct _MenuItem
@@ -81,9 +82,6 @@ static MenuItem menuitems[] = {
{ META_MENU_OP_RESIZE, MENU_ITEM_NORMAL, NULL, FALSE, N_("_Resize") },
/* Translators: Translate this string the same way as you do in libwnck! */
{ META_MENU_OP_RECOVER, MENU_ITEM_NORMAL, NULL, FALSE, N_("Move Titlebar On_screen") },
{ 0, MENU_ITEM_SEPARATOR, NULL, FALSE, NULL }, /* separator */
/* Translators: Translate this string the same way as you do in libwnck! */
{ META_MENU_OP_DELETE, MENU_ITEM_IMAGE, METACITY_STOCK_DELETE, FALSE, N_("_Close") },
{ META_MENU_OP_WORKSPACES, MENU_ITEM_SEPARATOR, NULL, FALSE, NULL }, /* separator */
/* Translators: Translate this string the same way as you do in libwnck! */
{ META_MENU_OP_ABOVE, MENU_ITEM_CHECKBOX, NULL, FALSE, N_("Always on _Top") },
@@ -100,7 +98,11 @@ static MenuItem menuitems[] = {
/* Translators: Translate this string the same way as you do in libwnck! */
{ META_MENU_OP_MOVE_UP, MENU_ITEM_NORMAL, NULL, FALSE, N_("Move to Workspace _Up") },
/* Translators: Translate this string the same way as you do in libwnck! */
{ META_MENU_OP_MOVE_DOWN, MENU_ITEM_NORMAL, NULL, FALSE, N_("Move to Workspace _Down") }
{ META_MENU_OP_MOVE_DOWN, MENU_ITEM_NORMAL, NULL, FALSE, N_("Move to Workspace _Down") },
{ 0, MENU_ITEM_WORKSPACE_LIST, NULL, FALSE, NULL },
{ 0, MENU_ITEM_SEPARATOR, NULL, FALSE, NULL }, /* separator */
/* Translators: Translate this string the same way as you do in libwnck! */
{ META_MENU_OP_DELETE, MENU_ITEM_IMAGE, METACITY_STOCK_DELETE, FALSE, N_("_Close") }
};
static void
@@ -292,6 +294,8 @@ menu_item_new (MenuItem *menuitem, int workspace_id)
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mi),
menuitem->checked);
}
else if (menuitem->type == MENU_ITEM_WORKSPACE_LIST)
return NULL;
else
return gtk_separator_menu_item_new ();
@@ -370,7 +374,86 @@ meta_window_menu_new (MetaFrames *frames,
break;
}
if (menuitem.type != MENU_ITEM_SEPARATOR)
if (menuitem.type == MENU_ITEM_WORKSPACE_LIST)
{
if (ops & META_MENU_OP_WORKSPACES)
{
Display *display;
Window xroot;
GdkScreen *screen;
GtkWidget *submenu;
int j;
MenuItem to_another_workspace = {
0, MENU_ITEM_NORMAL,
NULL, FALSE,
N_("Move to Another _Workspace")
};
meta_verbose ("Creating %d-workspace menu current space %lu\n",
n_workspaces, active_workspace);
display = gdk_x11_drawable_get_xdisplay (GTK_WIDGET (frames)->window);
screen = gdk_drawable_get_screen (GTK_WIDGET (frames)->window);
xroot = GDK_DRAWABLE_XID (gdk_screen_get_root_window (screen));
submenu = gtk_menu_new ();
g_assert (mi==NULL);
mi = menu_item_new (&to_another_workspace, -1);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), submenu);
for (j = 0; j < n_workspaces; j++)
{
char *label;
MenuData *md;
unsigned int key;
MetaVirtualModifier mods;
MenuItem moveitem;
GtkWidget *submi;
meta_core_get_menu_accelerator (META_MENU_OP_WORKSPACES,
j + 1,
&key, &mods);
label = get_workspace_name_with_accel (display, xroot, j);
moveitem.type = MENU_ITEM_NORMAL;
moveitem.op = META_MENU_OP_WORKSPACES;
moveitem.label = label;
submi = menu_item_new (&moveitem, j + 1);
g_free (label);
if ((active_workspace == (unsigned)j) && (ops & META_MENU_OP_UNSTICK))
gtk_widget_set_sensitive (submi, FALSE);
md = g_new (MenuData, 1);
md->menu = menu;
md->op = META_MENU_OP_WORKSPACES;
g_object_set_data (G_OBJECT (submi),
"workspace",
GINT_TO_POINTER (j));
gtk_signal_connect_full (GTK_OBJECT (submi),
"activate",
GTK_SIGNAL_FUNC (activate_cb),
NULL,
md,
g_free, FALSE, FALSE);
gtk_menu_shell_append (GTK_MENU_SHELL (submenu), submi);
gtk_widget_show (submi);
}
}
else
meta_verbose ("not creating workspace menu\n");
}
else if (menuitem.type != MENU_ITEM_SEPARATOR)
{
meta_core_get_menu_accelerator (menuitems[i].op, -1,
&key, &mods);
@@ -390,90 +473,15 @@ meta_window_menu_new (MetaFrames *frames,
md,
g_free, FALSE, FALSE);
}
gtk_menu_shell_append (GTK_MENU_SHELL (menu->menu), mi);
gtk_widget_show (mi);
}
}
if (ops & META_MENU_OP_WORKSPACES)
{
Display *display;
Window xroot;
GdkScreen *screen;
GtkWidget *submenu;
GtkWidget *submenuitem;
MenuItem to_another_workspace = {
0, MENU_ITEM_NORMAL,
NULL, FALSE,
N_("Move to Another _Workspace")
};
meta_verbose ("Creating %d-workspace menu current space %lu\n",
n_workspaces, active_workspace);
display = gdk_x11_drawable_get_xdisplay (GTK_WIDGET (frames)->window);
screen = gdk_drawable_get_screen (GTK_WIDGET (frames)->window);
xroot = GDK_DRAWABLE_XID (gdk_screen_get_root_window (screen));
submenu = gtk_menu_new ();
submenuitem = menu_item_new (&to_another_workspace, -1);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (submenuitem), submenu);
gtk_menu_shell_append (GTK_MENU_SHELL (menu->menu), submenuitem);
gtk_widget_show (submenuitem);
for (i = 0; i < n_workspaces; i++)
{
char *label;
MenuData *md;
unsigned int key;
MetaVirtualModifier mods;
MenuItem moveitem;
GtkWidget *mi;
meta_core_get_menu_accelerator (META_MENU_OP_WORKSPACES,
i + 1,
&key, &mods);
label = get_workspace_name_with_accel (display, xroot, i);
moveitem.type = MENU_ITEM_NORMAL;
moveitem.op = META_MENU_OP_WORKSPACES;
moveitem.label = label;
mi = menu_item_new (&moveitem, i + 1);
g_free (label);
if ((active_workspace == (unsigned)i) && (ops & META_MENU_OP_UNSTICK))
gtk_widget_set_sensitive (mi, FALSE);
md = g_new (MenuData, 1);
md->menu = menu;
md->op = META_MENU_OP_WORKSPACES;
g_object_set_data (G_OBJECT (mi),
"workspace",
GINT_TO_POINTER (i));
gtk_signal_connect_full (GTK_OBJECT (mi),
"activate",
GTK_SIGNAL_FUNC (activate_cb),
NULL,
md,
g_free, FALSE, FALSE);
gtk_menu_shell_append (GTK_MENU_SHELL (submenu), mi);
gtk_widget_show (mi);
}
}
else
meta_verbose ("not creating workspace menu\n");
g_signal_connect (menu->menu, "selection_done",
G_CALLBACK (menu_closed), menu);

View File

@@ -93,14 +93,29 @@
<short>Whether raising should be a side-effect of other user
interactions</short>
<long>
Setting this option to false can lead to buggy behavior, so
users are strongly discouraged from changing it from the default
of true.
Many actions (e.g. clicking in the client area, moving or
resizing the window) normally raise the window as a
side-effect. Set this option to false to decouple raising from
other user actions. Even when this option is false, windows can
still be raised by an alt-left-click anywhere on the window, a
normal click on the window decorations, or by special messages,
such as activation requests from pagers. This option is
currently disabled in click-to-focus mode.
normal click on the window decorations, or by special messages
from pagers, such as activation requests from tasklist applets.
This option is currently disabled in click-to-focus mode.
Note that the list of ways to raise windows when raise_on_click
is false does not include programmatic requests from
applications to raise windows; such requests will be ignored
regardless of the reason for the request. If you are an
application developer and have a user complaining that your
application does not work with this setting disabled, tell them
it is _their_ fault for breaking their window manager and that
they need to change this option back to true or live with the
bug they requested. See also
http://bugzilla.gnome.org/show_bug.cgi?id=445447#c6.
</long>
</locale>
</schema>

View File

@@ -500,8 +500,7 @@ find_first_fit (MetaWindow *window,
MetaFrameGeometry *fgeom,
/* visible windows on relevant workspaces */
GList *windows,
int* xineramas_list,
int n_xineramas,
int xinerama,
int x,
int y,
int *new_x,
@@ -520,7 +519,6 @@ find_first_fit (MetaWindow *window,
GList *tmp;
MetaRectangle rect;
MetaRectangle work_area;
int i;
retval = FALSE;
@@ -543,108 +541,99 @@ find_first_fit (MetaWindow *window,
rect.height += fgeom->top_height + fgeom->bottom_height;
}
for (i = 0; i < n_xineramas; i++)
{
#ifdef WITH_VERBOSE_MODE
{
char xinerama_location_string[RECT_LENGTH];
meta_rectangle_to_string (&window->screen->xinerama_infos[xineramas_list[i]].rect,
meta_rectangle_to_string (&window->screen->xinerama_infos[xinerama].rect,
xinerama_location_string);
meta_topic (META_DEBUG_XINERAMA,
"Natural xinerama %d is %s\n",
i,
"Natural xinerama is %s\n",
xinerama_location_string);
}
#endif
}
/* try each xinerama in the natural ordering in turn */
i = 0;
while (i < n_xineramas)
{
meta_window_get_work_area_for_xinerama (window, xineramas_list[i], &work_area);
meta_window_get_work_area_for_xinerama (window, xinerama, &work_area);
center_tile_rect_in_area (&rect, &work_area);
center_tile_rect_in_area (&rect, &work_area);
if (meta_rectangle_contains_rect (&work_area, &rect) &&
!rectangle_overlaps_some_window (&rect, windows))
{
*new_x = rect.x;
*new_y = rect.y;
if (fgeom)
{
*new_x += fgeom->left_width;
*new_y += fgeom->top_height;
}
if (meta_rectangle_contains_rect (&work_area, &rect) &&
!rectangle_overlaps_some_window (&rect, windows))
{
*new_x = rect.x;
*new_y = rect.y;
if (fgeom)
{
*new_x += fgeom->left_width;
*new_y += fgeom->top_height;
}
retval = TRUE;
goto out;
}
/* try below each window */
tmp = below_sorted;
while (tmp != NULL)
{
MetaWindow *w = tmp->data;
MetaRectangle outer_rect;
meta_window_get_outer_rect (w, &outer_rect);
retval = TRUE;
rect.x = outer_rect.x;
rect.y = outer_rect.y + outer_rect.height;
if (meta_rectangle_contains_rect (&work_area, &rect) &&
!rectangle_overlaps_some_window (&rect, below_sorted))
{
*new_x = rect.x;
*new_y = rect.y;
if (fgeom)
{
*new_x += fgeom->left_width;
*new_y += fgeom->top_height;
}
goto out;
}
/* try below each window */
tmp = below_sorted;
while (tmp != NULL)
{
MetaWindow *w = tmp->data;
MetaRectangle outer_rect;
meta_window_get_outer_rect (w, &outer_rect);
rect.x = outer_rect.x;
rect.y = outer_rect.y + outer_rect.height;
if (meta_rectangle_contains_rect (&work_area, &rect) &&
!rectangle_overlaps_some_window (&rect, below_sorted))
{
*new_x = rect.x;
*new_y = rect.y;
if (fgeom)
{
*new_x += fgeom->left_width;
*new_y += fgeom->top_height;
}
retval = TRUE;
retval = TRUE;
goto out;
}
goto out;
}
tmp = tmp->next;
}
tmp = tmp->next;
}
/* try to the right of each window */
tmp = right_sorted;
while (tmp != NULL)
{
MetaWindow *w = tmp->data;
MetaRectangle outer_rect;
/* try to the right of each window */
tmp = right_sorted;
while (tmp != NULL)
{
MetaWindow *w = tmp->data;
MetaRectangle outer_rect;
meta_window_get_outer_rect (w, &outer_rect);
meta_window_get_outer_rect (w, &outer_rect);
rect.x = outer_rect.x + outer_rect.width;
rect.y = outer_rect.y;
if (meta_rectangle_contains_rect (&work_area, &rect) &&
!rectangle_overlaps_some_window (&rect, right_sorted))
{
*new_x = rect.x;
*new_y = rect.y;
if (fgeom)
{
*new_x += fgeom->left_width;
*new_y += fgeom->top_height;
}
retval = TRUE;
goto out;
}
rect.x = outer_rect.x + outer_rect.width;
rect.y = outer_rect.y;
if (meta_rectangle_contains_rect (&work_area, &rect) &&
!rectangle_overlaps_some_window (&rect, right_sorted))
{
*new_x = rect.x;
*new_y = rect.y;
if (fgeom)
{
*new_x += fgeom->left_width;
*new_y += fgeom->top_height;
}
retval = TRUE;
goto out;
}
tmp = tmp->next;
}
tmp = tmp->next;
}
++i;
}
out:
g_list_free (below_sorted);
@@ -662,11 +651,7 @@ meta_window_place (MetaWindow *window,
{
GList *windows;
const MetaXineramaScreenInfo *xi;
int* xineramas_list = NULL;
int n_xineramas;
int i;
int placed_on = -1;
/* frame member variables should NEVER be used in here, only
* MetaFrameGeometry. But remember fgeom == NULL
* for undecorated windows. Also, this function should
@@ -793,10 +778,6 @@ meta_window_place (MetaWindow *window,
}
}
meta_screen_get_natural_xinerama_list (window->screen,
&xineramas_list,
&n_xineramas);
/* FIXME UTILITY with transient set should be stacked up
* on the sides of the parent window or something.
*/
@@ -861,54 +842,10 @@ meta_window_place (MetaWindow *window,
y = xi->rect.y;
if (find_first_fit (window, fgeom, windows,
xineramas_list, n_xineramas,
xi->number,
x, y, &x, &y))
goto done_check_denied_focus;
/* This is a special-case origin-cascade so that windows that are
* too large to fit onto a workspace (and which will be
* automaximized later) will go onto an empty xinerama if one is
* available.
*/
if (window->has_maximize_func && window->decorated &&
!window->fullscreen)
{
if (window->frame)
{
x = fgeom->left_width;
y = fgeom->top_height;
}
else
{
x = 0;
y = 0;
}
for (i = 0; i < n_xineramas; i++)
{
MetaRectangle work_area;
meta_window_get_work_area_for_xinerama (window, xineramas_list[i], &work_area);
if (!rectangle_overlaps_some_window (&work_area, windows))
{
x += work_area.x;
y += work_area.y;
placed_on = i;
break;
}
}
}
/* if the window wasn't placed at the origin of an empty xinerama,
* cascade it onto the current xinerama
*/
if (placed_on == -1)
{
find_next_cascade (window, fgeom, windows, x, y, &x, &y);
placed_on = window->screen->last_xinerama_index;
}
/* Maximize windows if they are too big for their work area (bit of
* a hack here). Assume undecorated windows probably don't intend to
* be maximized.
@@ -920,7 +857,7 @@ meta_window_place (MetaWindow *window,
MetaRectangle outer;
meta_window_get_work_area_for_xinerama (window,
xineramas_list[placed_on],
xi->number,
&workarea);
meta_window_get_outer_rect (window, &outer);
@@ -967,7 +904,7 @@ meta_window_place (MetaWindow *window,
y = xi->rect.y;
found_fit = find_first_fit (window, fgeom, focus_window_list,
xineramas_list, n_xineramas,
xi->number,
x, y, &x, &y);
g_list_free (focus_window_list);
}
@@ -980,7 +917,6 @@ meta_window_place (MetaWindow *window,
}
done:
g_free (xineramas_list);
g_list_free (windows);
done_no_constraints:

View File

@@ -109,20 +109,7 @@ static int cursor_size = 24;
static gboolean compositing_manager = FALSE;
static MetaVisualBellType visual_bell_type = META_VISUAL_BELL_FULLSCREEN_FLASH;
static MetaButtonLayout button_layout = {
{
META_BUTTON_FUNCTION_MENU,
META_BUTTON_FUNCTION_LAST,
META_BUTTON_FUNCTION_LAST,
META_BUTTON_FUNCTION_LAST
},
{
META_BUTTON_FUNCTION_MINIMIZE,
META_BUTTON_FUNCTION_MAXIMIZE,
META_BUTTON_FUNCTION_CLOSE,
META_BUTTON_FUNCTION_LAST
}
};
static MetaButtonLayout button_layout;
/* The screenshot commands are at the end */
static char *commands[MAX_COMMANDS] = { NULL, };
@@ -195,6 +182,7 @@ static gboolean update_list_binding (MetaKeyPref *binding,
static void init_bindings (void);
static void init_commands (void);
static void init_workspace_names (void);
static void init_button_layout (void);
typedef struct
@@ -376,6 +364,7 @@ meta_prefs_init (void)
GError *err = NULL;
char *str_val;
int int_val;
GConfValue *gconf_val;
gboolean bool_val, bool_val_2;
gboolean update_visual;
gboolean update_audible;
@@ -434,16 +423,18 @@ meta_prefs_init (void)
if (get_bool (KEY_AUTO_RAISE, &bool_val))
update_auto_raise (bool_val);
/* FIXME: Since auto_raise_delay of 0 is valid and gconf_client_get_int
* silently returns that value when KEY_AUTO_RAISE_DELAY doesn't exist,
* we should be using gconf_client_get() instead if we cared about
* careful error checking of the key-doesn't-exist case. Since this
* setting is crap, though, I'm adding a FIXME instead of fixing it. ;-)
*/
int_val = gconf_client_get_int (default_client, KEY_AUTO_RAISE_DELAY,
gconf_val = gconf_client_get (default_client, KEY_AUTO_RAISE_DELAY,
&err);
cleanup_error (&err);
update_auto_raise_delay (int_val);
if (gconf_val)
{
if (gconf_val->type == GCONF_VALUE_INT)
update_auto_raise_delay (gconf_value_get_int (gconf_val));
else
meta_warning(_("Type of %s was not integer"), KEY_AUTO_RAISE_DELAY);
gconf_value_free (gconf_val);
}
str_val = gconf_client_get_string (default_client, KEY_THEME,
@@ -530,6 +521,8 @@ meta_prefs_init (void)
*/
titlebar_font = pango_font_description_from_string ("Sans Bold 10");
current_theme = g_strdup ("Atlanta");
init_button_layout();
#endif /* HAVE_GCONF */
/* Load keybindings prefs */
@@ -1461,14 +1454,6 @@ update_button_layout (const char *value)
if (value == NULL)
return FALSE;
i = 0;
while (i < MAX_BUTTONS_PER_CORNER)
{
new_layout.left_buttons[i] = META_BUTTON_FUNCTION_LAST;
new_layout.right_buttons[i] = META_BUTTON_FUNCTION_LAST;
++i;
}
/* We need to ignore unknown button functions, for
* compat with future versions
*/
@@ -1515,6 +1500,8 @@ update_button_layout (const char *value)
++b;
}
new_layout.left_buttons[i] = META_BUTTON_FUNCTION_LAST;
g_strfreev (buttons);
}
@@ -1558,11 +1545,32 @@ update_button_layout (const char *value)
++b;
}
new_layout.right_buttons[i] = META_BUTTON_FUNCTION_LAST;
g_strfreev (buttons);
}
g_strfreev (sides);
/* Invert the button layout for RTL languages */
if (meta_ui_get_direction() == META_UI_DIRECTION_RTL)
{
MetaButtonLayout rtl_layout;
int j;
for (i = 0; new_layout.left_buttons[i] != META_BUTTON_FUNCTION_LAST; i++);
for (j = 0; j < i; j++)
rtl_layout.right_buttons[j] = new_layout.left_buttons[i - j - 1];
rtl_layout.right_buttons[j] = META_BUTTON_FUNCTION_LAST;
for (i = 0; new_layout.right_buttons[i] != META_BUTTON_FUNCTION_LAST; i++);
for (j = 0; j < i; j++)
rtl_layout.left_buttons[j] = new_layout.right_buttons[i - j - 1];
rtl_layout.left_buttons[j] = META_BUTTON_FUNCTION_LAST;
new_layout = rtl_layout;
}
changed = !button_layout_equal (&button_layout, &new_layout);
button_layout = new_layout;
@@ -2544,7 +2552,6 @@ find_and_update_list_binding (MetaKeyPref *bindings,
name_without_suffix[strlen(name_without_suffix) - strlen(KEY_LIST_BINDINGS_SUFFIX)] = 0;
/* FIXME factor out dupld code */
if (*name_without_suffix == '/')
key = relative_key (name_without_suffix);
else
@@ -3036,3 +3043,39 @@ meta_prefs_get_compositing_manager (void)
{
return compositing_manager;
}
static void
init_button_layout(void)
{
MetaButtonLayout button_layout_ltr = {
{
/* buttons in the group on the left side */
META_BUTTON_FUNCTION_MENU,
META_BUTTON_FUNCTION_LAST
},
{
/* buttons in the group on the right side */
META_BUTTON_FUNCTION_MINIMIZE,
META_BUTTON_FUNCTION_MAXIMIZE,
META_BUTTON_FUNCTION_CLOSE,
META_BUTTON_FUNCTION_LAST
}
};
MetaButtonLayout button_layout_rtl = {
{
/* buttons in the group on the left side */
META_BUTTON_FUNCTION_CLOSE,
META_BUTTON_FUNCTION_MAXIMIZE,
META_BUTTON_FUNCTION_MINIMIZE,
META_BUTTON_FUNCTION_LAST
},
{
/* buttons in the group on the right side */
META_BUTTON_FUNCTION_MENU,
META_BUTTON_FUNCTION_LAST
}
};
button_layout = meta_ui_get_direction() == META_UI_DIRECTION_LTR ?
button_layout_ltr : button_layout_rtl;
};

View File

@@ -990,7 +990,7 @@ meta_screen_queue_frame_redraws (MetaScreen *screen)
static void
queue_resize (MetaScreen *screen, MetaWindow *window, gpointer data)
{
meta_window_queue_move_resize (window);
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
}
void
@@ -2219,7 +2219,7 @@ meta_screen_resize_func (MetaScreen *screen,
{
meta_window_update_struts (window);
}
meta_window_queue_move_resize (window);
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
meta_window_recalc_features (window);
}
@@ -2272,7 +2272,7 @@ queue_windows_showing (MetaScreen *screen)
MetaWindow *w = tmp->data;
if (w->screen == screen)
meta_window_queue_calc_showing (w);
meta_window_queue (w, META_QUEUE_CALC_SHOWING);
tmp = tmp->next;
}
@@ -2546,7 +2546,15 @@ meta_screen_sn_event (SnMonitorEvent *event,
}
#endif
void
/* Sets the initial_timestamp and initial_workspace properties
* of a window according to information given us by the
* startup-notification library.
*
* Returns TRUE if startup properties have been applied, and
* FALSE if they have not (for example, if they had already
* been applied.)
*/
gboolean
meta_screen_apply_startup_properties (MetaScreen *screen,
MetaWindow *window)
{
@@ -2555,6 +2563,7 @@ meta_screen_apply_startup_properties (MetaScreen *screen,
GSList *tmp;
SnStartupSequence *sequence;
/* Does the window have a startup ID stored? */
startup_id = meta_window_get_startup_id (window);
meta_topic (META_DEBUG_STARTUP,
@@ -2565,6 +2574,10 @@ meta_screen_apply_startup_properties (MetaScreen *screen,
sequence = NULL;
if (startup_id == NULL)
{
/* No startup ID stored for the window. Let's ask the
* startup-notification library whether there's anything
* stored for the resource name or resource class hints.
*/
tmp = screen->startup_sequences;
while (tmp != NULL)
{
@@ -2597,9 +2610,14 @@ meta_screen_apply_startup_properties (MetaScreen *screen,
}
}
/* Still no startup ID? Bail. */
if (startup_id == NULL)
return;
return FALSE;
/* We might get this far and not know the sequence ID (if the window
* already had a startup ID stored), so let's look for one if we don't
* already know it.
*/
if (sequence == NULL)
{
tmp = screen->startup_sequences;
@@ -2621,8 +2639,7 @@ meta_screen_apply_startup_properties (MetaScreen *screen,
if (sequence != NULL)
{
int space;
guint32 timestamp;
gboolean changed_something = FALSE;
meta_topic (META_DEBUG_STARTUP,
"Found startup sequence for window %s ID \"%s\"\n",
@@ -2630,7 +2647,7 @@ meta_screen_apply_startup_properties (MetaScreen *screen,
if (!window->initial_workspace_set)
{
space = sn_startup_sequence_get_workspace (sequence);
int space = sn_startup_sequence_get_workspace (sequence);
if (space >= 0)
{
meta_topic (META_DEBUG_STARTUP,
@@ -2639,21 +2656,23 @@ meta_screen_apply_startup_properties (MetaScreen *screen,
window->initial_workspace_set = TRUE;
window->initial_workspace = space;
changed_something = TRUE;
}
}
if (!window->initial_timestamp_set)
{
timestamp = sn_startup_sequence_get_timestamp (sequence);
guint32 timestamp = sn_startup_sequence_get_timestamp (sequence);
meta_topic (META_DEBUG_STARTUP,
"Setting initial window timestamp to %u based on startup info\n",
timestamp);
window->initial_timestamp_set = TRUE;
window->initial_timestamp = timestamp;
changed_something = TRUE;
}
return;
return changed_something;
}
else
{
@@ -2663,5 +2682,7 @@ meta_screen_apply_startup_properties (MetaScreen *screen,
}
#endif /* HAVE_STARTUP_NOTIFICATION */
return FALSE;
}

View File

@@ -207,7 +207,7 @@ void meta_screen_unshow_desktop (MetaScreen *screen);
/* Update whether the destkop is being shown for the current active_workspace */
void meta_screen_update_showing_desktop_hint (MetaScreen *screen);
void meta_screen_apply_startup_properties (MetaScreen *screen,
gboolean meta_screen_apply_startup_properties (MetaScreen *screen,
MetaWindow *window);
void meta_screen_composite_all_windows (MetaScreen *screen);

View File

@@ -1804,9 +1804,6 @@ warn_about_lame_clients_and_finish_interact (gboolean shutdown)
display_iter = display_iter->next;
}
/* don't need to free displays */
displays = NULL;
if (lame == NULL)
{
/* No lame apps. */
@@ -1819,6 +1816,9 @@ warn_about_lame_clients_and_finish_interact (gboolean shutdown)
timestamp = meta_display_get_current_time_roundtrip (displays->data);
sprintf (timestampbuf, "%u", timestamp);
/* don't need to free displays */
displays = NULL;
len = g_slist_length (lame);
len *= 2; /* titles and also classes */
len += 2; /* --timestamp flag and actual timestamp */

View File

@@ -596,14 +596,11 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
n_left = 0;
n_right = 0;
for (i = 0; i < MAX_BUTTONS_PER_CORNER; i++)
{
/* NULL all unused */
left_func_rects[i] = NULL;
right_func_rects[i] = NULL;
if (!layout->hide_buttons)
{
/* Try to fill in rects */
if (button_layout->left_buttons[i] != META_BUTTON_FUNCTION_LAST && !layout->hide_buttons)
for (i = 0; i < MAX_BUTTONS_PER_CORNER && button_layout->left_buttons[i] != META_BUTTON_FUNCTION_LAST; i++)
{
left_func_rects[n_left] = rect_for_function (fgeom, flags,
button_layout->left_buttons[i],
@@ -612,7 +609,7 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
++n_left;
}
if (button_layout->right_buttons[i] != META_BUTTON_FUNCTION_LAST && !layout->hide_buttons)
for (i = 0; i < MAX_BUTTONS_PER_CORNER && button_layout->right_buttons[i] != META_BUTTON_FUNCTION_LAST; i++)
{
right_func_rects[n_right] = rect_for_function (fgeom, flags,
button_layout->right_buttons[i],

View File

@@ -702,9 +702,10 @@ reload_mwm_hints (MetaWindow *window,
else
meta_window_destroy_frame (window);
meta_window_queue_move_resize (window);
/* because ensure/destroy frame may unmap */
meta_window_queue_calc_showing (window);
meta_window_queue (window,
META_QUEUE_MOVE_RESIZE |
/* because ensure/destroy frame may unmap: */
META_QUEUE_CALC_SHOWING);
}
}
@@ -796,14 +797,16 @@ reload_net_startup_id (MetaWindow *window,
window->initial_timestamp_set = 0;
window->initial_workspace_set = 0;
meta_screen_apply_startup_properties (window->screen, window);
if (meta_screen_apply_startup_properties (window->screen, window))
{
if (window->initial_timestamp_set)
timestamp = window->initial_timestamp;
if (window->initial_workspace_set)
workspace = meta_screen_get_workspace_by_index (window->screen, window->initial_workspace);
if (window->initial_timestamp_set)
timestamp = window->initial_timestamp;
if (window->initial_workspace_set)
workspace = meta_screen_get_workspace_by_index (window->screen, window->initial_workspace);
meta_window_activate_with_workspace (window, timestamp, workspace);
meta_window_activate_with_workspace (window, timestamp, workspace);
}
}
meta_verbose ("New _NET_STARTUP_ID \"%s\" for %s\n",
@@ -1374,9 +1377,7 @@ reload_wm_hints (MetaWindow *window,
window->display,
XA_WM_HINTS);
meta_window_queue_update_icon (window);
meta_window_queue_move_resize (window);
meta_window_queue (window, META_QUEUE_UPDATE_ICON | META_QUEUE_MOVE_RESIZE);
}
static void
@@ -1433,7 +1434,7 @@ reload_transient_for (MetaWindow *window,
meta_window_group_leader_changed (window);
if (!window->constructing)
meta_window_queue_move_resize (window);
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
}
#define N_HOOKS 26

View File

@@ -90,6 +90,8 @@ static void ensure_mru_position_after (MetaWindow *window,
static void meta_window_move_resize_now (MetaWindow *window);
static void meta_window_unqueue (MetaWindow *window, guint queuebits);
static void update_move (MetaWindow *window,
gboolean snap,
int x,
@@ -103,15 +105,8 @@ static void update_resize (MetaWindow *window,
static gboolean update_resize_timeout (gpointer data);
/* FIXME we need an abstraction that covers all these queues. */
static void meta_window_unqueue_calc_showing (MetaWindow *window);
static void meta_window_flush_calc_showing (MetaWindow *window);
static void meta_window_unqueue_move_resize (MetaWindow *window);
static void meta_window_unqueue_update_icon (MetaWindow *window);
static gboolean queue_calc_showing_func (MetaWindow *window,
void *data);
@@ -121,6 +116,15 @@ static void meta_window_apply_session_info (MetaWindow *window,
static void unmaximize_window_before_freeing (MetaWindow *window);
static void unminimize_window_and_all_transient_parents (MetaWindow *window);
/* Idle handlers for the three queues. The "data" parameter in each case
* will be a GINT_TO_POINTER of the index into the queue arrays to use.
*
* TODO: Possibly there is still some code duplication among these, which we
* need to sort out at some point.
*/
static gboolean idle_calc_showing (gpointer data);
static gboolean idle_move_resize (gpointer data);
static gboolean idle_update_icon (gpointer data);
#ifdef WITH_VERBOSE_MODE
static const char*
@@ -467,8 +471,7 @@ meta_window_new_with_attrs (MetaDisplay *display,
xwindow);
window->denied_focus_and_not_transient = FALSE;
window->unmanaging = FALSE;
window->calc_showing_queued = FALSE;
window->move_resize_queued = FALSE;
window->is_in_queues = 0;
window->keys_grabbed = FALSE;
window->grab_on_frame = FALSE;
window->all_keys_grabbed = FALSE;
@@ -538,7 +541,6 @@ meta_window_new_with_attrs (MetaDisplay *display,
window->using_net_wm_visible_icon_name = FALSE;
window->need_reread_icon = TRUE;
window->update_icon_queued = FALSE;
window->layer = META_LAYER_LAST; /* invalid value */
window->stack_position = -1;
@@ -753,7 +755,7 @@ meta_window_new_with_attrs (MetaDisplay *display,
/* disable show desktop mode unless we're a desktop component */
maybe_leave_show_desktop_mode (window);
meta_window_queue_calc_showing (window);
meta_window_queue (window, META_QUEUE_CALC_SHOWING);
/* See bug 303284; a transient of the given window can already exist, in which
* case we think it should probably be shown.
*/
@@ -1021,9 +1023,9 @@ meta_window_free (MetaWindow *window,
*/
send_configure_notify (window);
meta_window_unqueue_calc_showing (window);
meta_window_unqueue_move_resize (window);
meta_window_unqueue_update_icon (window);
meta_window_unqueue (window, META_QUEUE_CALC_SHOWING |
META_QUEUE_MOVE_RESIZE |
META_QUEUE_UPDATE_ICON);
meta_window_free_delete_dialog (window);
if (window->workspace)
@@ -1450,8 +1452,8 @@ meta_window_calc_showing (MetaWindow *window)
implement_showing (window, meta_window_should_be_showing (window));
}
static guint calc_showing_idle = 0;
static GSList *calc_showing_pending = NULL;
static guint queue_idle[NUMBER_OF_QUEUES] = {0, 0, 0};
static GSList *queue_pending[NUMBER_OF_QUEUES] = {NULL, NULL, NULL};
static int
stackcmp (gconstpointer a, gconstpointer b)
@@ -1476,6 +1478,7 @@ idle_calc_showing (gpointer data)
GSList *unplaced;
GSList *displays;
MetaWindow *first_window;
guint queue_index = GPOINTER_TO_INT (data);
meta_topic (META_DEBUG_WINDOW_STATE,
"Clearing the calc_showing queue\n");
@@ -1484,10 +1487,10 @@ idle_calc_showing (gpointer data)
* complete; destroying a window while we're in here would result in
* badness. But it's OK to queue/unqueue calc_showings.
*/
copy = g_slist_copy (calc_showing_pending);
g_slist_free (calc_showing_pending);
calc_showing_pending = NULL;
calc_showing_idle = 0;
copy = g_slist_copy (queue_pending[queue_index]);
g_slist_free (queue_pending[queue_index]);
queue_pending[queue_index] = NULL;
queue_idle[queue_index] = 0;
destroying_windows_disallowed += 1;
@@ -1575,9 +1578,9 @@ idle_calc_showing (gpointer data)
/* important to set this here for reentrancy -
* if we queue a window again while it's in "copy",
* then queue_calc_showing will just return since
* calc_showing_queued = TRUE still
* we are still in the calc_showing queue
*/
window->calc_showing_queued = FALSE;
window->is_in_queues &= ~META_QUEUE_CALC_SHOWING;
tmp = tmp->next;
}
@@ -1615,62 +1618,123 @@ idle_calc_showing (gpointer data)
return FALSE;
}
static const gchar* meta_window_queue_names[NUMBER_OF_QUEUES] =
{"calc_showing", "move_resize", "update_icon"};
static void
meta_window_unqueue_calc_showing (MetaWindow *window)
meta_window_unqueue (MetaWindow *window, guint queuebits)
{
if (!window->calc_showing_queued)
return;
gint queuenum;
meta_topic (META_DEBUG_WINDOW_STATE,
"Removing %s from the calc_showing queue\n",
window->desc);
/* Note that window may not actually be in move_resize_pending
* because it may have been in "copy" inside the idle handler
*/
calc_showing_pending = g_slist_remove (calc_showing_pending, window);
window->calc_showing_queued = FALSE;
if (calc_showing_pending == NULL &&
calc_showing_idle != 0)
for (queuenum=0; queuenum<NUMBER_OF_QUEUES; queuenum++)
{
g_source_remove (calc_showing_idle);
calc_showing_idle = 0;
if ((queuebits & 1<<queuenum) /* they have asked to unqueue */
&&
(window->is_in_queues & 1<<queuenum)) /* it's in the queue */
{
meta_topic (META_DEBUG_WINDOW_STATE,
"Removing %s from the %s queue\n",
window->desc,
meta_window_queue_names[queuenum]);
/* Note that window may not actually be in the queue
* because it may have been in "copy" inside the idle handler
*/
queue_pending[queuenum] = g_slist_remove (queue_pending[queuenum], window);
window->is_in_queues &= ~(1<<queuenum);
/* Okay, so maybe we've used up all the entries in the queue.
* In that case, we should kill the function that deals with
* the queue, because there's nothing left for it to do.
*/
if (queue_pending[queuenum] == NULL && queue_idle[queuenum] != 0)
{
g_source_remove (queue_idle[queuenum]);
queue_idle[queuenum] = 0;
}
}
}
}
static void
meta_window_flush_calc_showing (MetaWindow *window)
{
if (window->calc_showing_queued)
if (window->is_in_queues & META_QUEUE_CALC_SHOWING)
{
meta_window_unqueue_calc_showing (window);
meta_window_unqueue (window, META_QUEUE_CALC_SHOWING);
meta_window_calc_showing (window);
}
}
void
meta_window_queue_calc_showing (MetaWindow *window)
meta_window_queue (MetaWindow *window, guint queuebits)
{
/* if withdrawn = TRUE then unmanaging should also be TRUE,
* really.
*/
if (window->unmanaging || window->withdrawn)
return;
guint queuenum;
if (window->calc_showing_queued)
return;
for (queuenum=0; queuenum<NUMBER_OF_QUEUES; queuenum++)
{
if (queuebits & 1<<queuenum)
{
/* Data which varies between queues.
* Yes, these do look a lot like associative arrays:
* I seem to be turning into a Perl programmer.
*/
meta_topic (META_DEBUG_WINDOW_STATE,
"Putting %s in the calc_showing queue\n",
window->desc);
window->calc_showing_queued = TRUE;
if (calc_showing_idle == 0)
calc_showing_idle = g_idle_add (idle_calc_showing, NULL);
const gint window_queue_idle_priority[NUMBER_OF_QUEUES] =
{
G_PRIORITY_DEFAULT_IDLE, /* CALC_SHOWING */
META_PRIORITY_RESIZE, /* MOVE_RESIZE */
G_PRIORITY_DEFAULT_IDLE /* UPDATE_ICON */
};
calc_showing_pending = g_slist_prepend (calc_showing_pending, window);
const GSourceFunc window_queue_idle_handler[NUMBER_OF_QUEUES] =
{
idle_calc_showing,
idle_move_resize,
idle_update_icon,
};
/* If we're about to drop the window, there's no point in putting
* it on a queue.
*/
if (window->unmanaging)
break;
/* If the window already claims to be in that queue, there's no
* point putting it in the queue.
*/
if (window->is_in_queues & 1<<queuenum)
break;
meta_topic (META_DEBUG_WINDOW_STATE,
"Putting %s in the %s queue\n",
window->desc,
meta_window_queue_names[queuenum]);
/* So, mark it as being in this queue. */
window->is_in_queues |= 1<<queuenum;
/* There's not a lot of point putting things into a queue if
* nobody's on the other end pulling them out. Therefore,
* let's check to see whether an idle handler exists to do
* that. If not, we'll create one.
*/
if (queue_idle[queuenum] == 0)
queue_idle[queuenum] = g_idle_add_full
(
window_queue_idle_priority[queuenum],
window_queue_idle_handler[queuenum],
GUINT_TO_POINTER(queuenum),
NULL
);
/* And now we actually put it on the queue. */
queue_pending[queuenum] = g_slist_prepend (queue_pending[queuenum],
window);
}
}
}
static gboolean
@@ -2191,7 +2255,7 @@ static gboolean
queue_calc_showing_func (MetaWindow *window,
void *data)
{
meta_window_queue_calc_showing (window);
meta_window_queue(window, META_QUEUE_CALC_SHOWING);
return TRUE;
}
@@ -2201,7 +2265,7 @@ meta_window_minimize (MetaWindow *window)
if (!window->minimized)
{
window->minimized = TRUE;
meta_window_queue_calc_showing (window);
meta_window_queue(window, META_QUEUE_CALC_SHOWING);
meta_window_foreach_transient (window,
queue_calc_showing_func,
@@ -2229,7 +2293,7 @@ meta_window_unminimize (MetaWindow *window)
{
window->minimized = FALSE;
window->was_minimized = TRUE;
meta_window_queue_calc_showing (window);
meta_window_queue(window, META_QUEUE_CALC_SHOWING);
meta_window_foreach_transient (window,
queue_calc_showing_func,
@@ -2378,7 +2442,7 @@ meta_window_maximize (MetaWindow *window,
/* move_resize with new maximization constraints
*/
meta_window_queue_move_resize (window);
meta_window_queue(window, META_QUEUE_MOVE_RESIZE);
}
}
@@ -2551,7 +2615,7 @@ meta_window_make_fullscreen (MetaWindow *window)
meta_window_make_fullscreen_internal (window);
/* move_resize with new constraints
*/
meta_window_queue_move_resize (window);
meta_window_queue(window, META_QUEUE_MOVE_RESIZE);
}
}
@@ -2621,8 +2685,7 @@ meta_window_shade (MetaWindow *window,
window->shaded = TRUE;
meta_window_queue_move_resize (window);
meta_window_queue_calc_showing (window);
meta_window_queue(window, META_QUEUE_MOVE_RESIZE | META_QUEUE_CALC_SHOWING);
/* After queuing the calc showing, since _focus flushes it,
* and we need to focus the frame
@@ -2645,8 +2708,7 @@ meta_window_unshade (MetaWindow *window,
if (window->shaded)
{
window->shaded = FALSE;
meta_window_queue_move_resize (window);
meta_window_queue_calc_showing (window);
meta_window_queue(window, META_QUEUE_MOVE_RESIZE | META_QUEUE_CALC_SHOWING);
/* focus the window */
meta_topic (META_DEBUG_FOCUS,
@@ -3017,7 +3079,7 @@ meta_window_move_resize_internal (MetaWindow *window,
g_assert (flags & (META_IS_MOVE_ACTION | META_IS_RESIZE_ACTION));
/* We don't need it in the idle queue anymore. */
meta_window_unqueue_move_resize (window);
meta_window_unqueue (window, META_QUEUE_MOVE_RESIZE);
meta_window_get_client_root_coords (window, &old_rect);
@@ -3485,14 +3547,12 @@ meta_window_move_resize_now (MetaWindow *window)
window->user_rect.height);
}
static guint move_resize_idle = 0;
static GSList *move_resize_pending = NULL;
static gboolean
idle_move_resize (gpointer data)
{
GSList *tmp;
GSList *copy;
guint queue_index = GPOINTER_TO_INT (data);
meta_topic (META_DEBUG_GEOMETRY, "Clearing the move_resize queue\n");
@@ -3500,10 +3560,10 @@ idle_move_resize (gpointer data)
* complete; destroying a window while we're in here would result in
* badness. But it's OK to queue/unqueue move_resizes.
*/
copy = g_slist_copy (move_resize_pending);
g_slist_free (move_resize_pending);
move_resize_pending = NULL;
move_resize_idle = 0;
copy = g_slist_copy (queue_pending[queue_index]);
g_slist_free (queue_pending[queue_index]);
queue_pending[queue_index] = NULL;
queue_idle[queue_index] = 0;
destroying_windows_disallowed += 1;
@@ -3527,58 +3587,6 @@ idle_move_resize (gpointer data)
return FALSE;
}
static void
meta_window_unqueue_move_resize (MetaWindow *window)
{
if (!window->move_resize_queued)
return;
meta_topic (META_DEBUG_GEOMETRY,
"Removing %s from the move_resize queue\n",
window->desc);
/* Note that window may not actually be in move_resize_pending
* because it may have been in "copy" inside the idle handler
*/
move_resize_pending = g_slist_remove (move_resize_pending, window);
window->move_resize_queued = FALSE;
if (move_resize_pending == NULL &&
move_resize_idle != 0)
{
g_source_remove (move_resize_idle);
move_resize_idle = 0;
}
}
/* The move/resize queue is only used when we need to
* recheck the constraints on the window, e.g. when
* maximizing or when changing struts. Configure requests
* and such always have to be handled synchronously,
* they can't be done via a queue.
*/
void
meta_window_queue_move_resize (MetaWindow *window)
{
if (window->unmanaging)
return;
if (window->move_resize_queued)
return;
meta_topic (META_DEBUG_GEOMETRY,
"Putting %s in the move_resize queue\n",
window->desc);
window->move_resize_queued = TRUE;
if (move_resize_idle == 0)
move_resize_idle = g_idle_add_full (META_PRIORITY_RESIZE,
idle_move_resize, NULL, NULL);
move_resize_pending = g_slist_prepend (move_resize_pending, window);
}
void
meta_window_get_position (MetaWindow *window,
int *x,
@@ -4058,7 +4066,7 @@ window_stick_impl (MetaWindow *window)
meta_window_set_current_workspace_hint (window);
meta_window_queue_calc_showing (window);
meta_window_queue(window, META_QUEUE_CALC_SHOWING);
}
static void
@@ -4094,7 +4102,7 @@ window_unstick_impl (MetaWindow *window)
meta_window_set_current_workspace_hint (window);
meta_window_queue_calc_showing (window);
meta_window_queue(window, META_QUEUE_CALC_SHOWING);
}
static gboolean
@@ -4757,7 +4765,7 @@ meta_window_client_message (MetaWindow *window,
(action == _NET_WM_STATE_TOGGLE && !window->wm_state_modal);
recalc_window_type (window);
meta_window_queue_move_resize (window);
meta_window_queue(window, META_QUEUE_MOVE_RESIZE);
}
if (first == display->atom_net_wm_state_skip_pager ||
@@ -5135,8 +5143,18 @@ meta_window_notify_focus (MetaWindow *window,
/* Ungrab click to focus button since the sync grab can interfere
* with some things you might do inside the focused window, by
* causing the client to get funky enter/leave events.
*
* The reason we usually have a passive grab on the window is
* so that we can intercept clicks and raise the window in
* response. For click-to-focus we don't need that since the
* focused window is already raised. When raise_on_click is
* FALSE we also don't need that since we don't do anything
* when the window is clicked.
*
* There is dicussion in bugs 102209, 115072, and 461577
*/
if (meta_prefs_get_focus_mode () == META_FOCUS_MODE_CLICK)
if (meta_prefs_get_focus_mode () == META_FOCUS_MODE_CLICK ||
!meta_prefs_get_raise_on_click())
meta_display_ungrab_focus_window_button (window->display, window);
}
}
@@ -5175,8 +5193,9 @@ meta_window_notify_focus (MetaWindow *window,
/* move out of FOCUSED_WINDOW layer */
meta_window_update_layer (window);
/* Re-grab for click to focus, if necessary */
if (meta_prefs_get_focus_mode () == META_FOCUS_MODE_CLICK)
/* Re-grab for click to focus and raise-on-click, if necessary */
if (meta_prefs_get_focus_mode () == META_FOCUS_MODE_CLICK ||
!meta_prefs_get_raise_on_click ())
meta_display_grab_focus_window_button (window->display, window);
}
}
@@ -5248,7 +5267,7 @@ process_property_notify (MetaWindow *window,
meta_window_reload_property (window, XA_WM_NORMAL_HINTS);
/* See if we need to constrain current size */
meta_window_queue_move_resize (window);
meta_window_queue(window, META_QUEUE_MOVE_RESIZE);
}
else if (event->atom == window->display->atom_wm_protocols)
{
@@ -5307,7 +5326,7 @@ process_property_notify (MetaWindow *window,
meta_icon_cache_property_changed (&window->icon_cache,
window->display,
event->atom);
meta_window_queue_update_icon (window);
meta_window_queue(window, META_QUEUE_UPDATE_ICON);
}
else if (event->atom == window->display->atom_kwm_win_icon)
{
@@ -5316,7 +5335,7 @@ process_property_notify (MetaWindow *window,
meta_icon_cache_property_changed (&window->icon_cache,
window->display,
event->atom);
meta_window_queue_update_icon (window);
meta_window_queue(window, META_QUEUE_UPDATE_ICON);
}
else if ((event->atom == window->display->atom_net_wm_strut) ||
(event->atom == window->display->atom_net_wm_strut_partial))
@@ -5671,14 +5690,12 @@ meta_window_update_icon_now (MetaWindow *window)
g_assert (window->mini_icon);
}
static guint update_icon_idle = 0;
static GSList *update_icon_pending = NULL;
static gboolean
idle_update_icon (gpointer data)
{
GSList *tmp;
GSList *copy;
guint queue_index = GPOINTER_TO_INT (data);
meta_topic (META_DEBUG_GEOMETRY, "Clearing the update_icon queue\n");
@@ -5686,10 +5703,10 @@ idle_update_icon (gpointer data)
* complete; destroying a window while we're in here would result in
* badness. But it's OK to queue/unqueue update_icons.
*/
copy = g_slist_copy (update_icon_pending);
g_slist_free (update_icon_pending);
update_icon_pending = NULL;
update_icon_idle = 0;
copy = g_slist_copy (queue_pending[queue_index]);
g_slist_free (queue_pending[queue_index]);
queue_pending[queue_index] = NULL;
queue_idle[queue_index] = 0;
destroying_windows_disallowed += 1;
@@ -5701,7 +5718,7 @@ idle_update_icon (gpointer data)
window = tmp->data;
meta_window_update_icon_now (window);
window->update_icon_queued = FALSE;
window->is_in_queues &= ~META_QUEUE_UPDATE_ICON;
tmp = tmp->next;
}
@@ -5713,51 +5730,6 @@ idle_update_icon (gpointer data)
return FALSE;
}
static void
meta_window_unqueue_update_icon (MetaWindow *window)
{
if (!window->update_icon_queued)
return;
meta_topic (META_DEBUG_GEOMETRY,
"Removing %s from the update_icon queue\n",
window->desc);
/* Note that window may not actually be in update_icon_pending
* because it may have been in "copy" inside the idle handler
*/
update_icon_pending = g_slist_remove (update_icon_pending, window);
window->update_icon_queued = FALSE;
if (update_icon_pending == NULL &&
update_icon_idle != 0)
{
g_source_remove (update_icon_idle);
update_icon_idle = 0;
}
}
void
meta_window_queue_update_icon (MetaWindow *window)
{
if (window->unmanaging)
return;
if (window->update_icon_queued)
return;
meta_topic (META_DEBUG_GEOMETRY,
"Putting %s in the update_icon queue\n",
window->desc);
window->update_icon_queued = TRUE;
if (update_icon_idle == 0)
update_icon_idle = g_idle_add (idle_update_icon, NULL);
update_icon_pending = g_slist_prepend (update_icon_pending, window);
}
GList*
meta_window_get_workspaces (MetaWindow *window)
{
@@ -6040,6 +6012,9 @@ set_allowed_actions_hint (MetaWindow *window)
{
data[i] = window->display->atom_net_wm_action_resize;
++i;
}
if (window->has_fullscreen_func)
{
data[i] = window->display->atom_net_wm_action_fullscreen;
++i;
}
@@ -6540,7 +6515,7 @@ meta_window_show_menu (MetaWindow *window,
insensitive |= META_MENU_OP_RESIZE;
if (window->always_sticky)
insensitive |= META_MENU_OP_UNSTICK | META_MENU_OP_WORKSPACES;
insensitive |= META_MENU_OP_STICK | META_MENU_OP_UNSTICK | META_MENU_OP_WORKSPACES;
if ((window->type == META_WINDOW_DESKTOP) ||
(window->type == META_WINDOW_DOCK) ||

View File

@@ -36,6 +36,7 @@
#include <gdk-pixbuf/gdk-pixbuf.h>
typedef struct _MetaGroup MetaGroup;
typedef struct _MetaWindowQueue MetaWindowQueue;
typedef gboolean (*MetaWindowForeachFunc) (MetaWindow *window,
void *data);
@@ -66,6 +67,14 @@ typedef enum {
META_CLIENT_TYPE_MAX_RECOGNIZED = 2
} MetaClientType;
typedef enum {
META_QUEUE_CALC_SHOWING = 1 << 0,
META_QUEUE_MOVE_RESIZE = 1 << 1,
META_QUEUE_UPDATE_ICON = 1 << 2,
} MetaQueueType;
#define NUMBER_OF_QUEUES 3
struct _MetaWindow
{
MetaDisplay *display;
@@ -236,15 +245,9 @@ struct _MetaWindow
/* Are we in meta_window_new()? */
guint constructing : 1;
/* Are we in the calc_showing queue? */
guint calc_showing_queued : 1;
/* Are we in the move_resize queue? */
guint move_resize_queued : 1;
/* Are we in the update_icon queue? */
guint update_icon_queued : 1;
/* Are we in the various queues? (Bitfield: see META_WINDOW_IS_IN_QUEUE) */
guint is_in_queues : NUMBER_OF_QUEUES;
/* Used by keybindings.c */
guint keys_grabbed : 1; /* normal keybindings grabbed */
guint grab_on_frame : 1; /* grabs are on the frame */
@@ -260,9 +263,6 @@ struct _MetaWindow
*/
guint calc_placement : 1;
/* Note: can be NULL */
GSList *struts;
/* Transient parent is a root window */
guint transient_parent_is_root_window : 1;
@@ -287,6 +287,9 @@ struct _MetaWindow
/* if TRUE, application is buggy and SYNC resizing is turned off */
guint disable_sync : 1;
/* Note: can be NULL */
GSList *struts;
#ifdef HAVE_XSYNC
/* XSync update counter */
XSyncCounter sync_request_counter;
@@ -377,7 +380,8 @@ MetaWindow* meta_window_new_with_attrs (MetaDisplay *display,
void meta_window_free (MetaWindow *window,
guint32 timestamp);
void meta_window_calc_showing (MetaWindow *window);
void meta_window_queue_calc_showing (MetaWindow *window);
void meta_window_queue (MetaWindow *window,
guint queuebits);
void meta_window_minimize (MetaWindow *window);
void meta_window_unminimize (MetaWindow *window);
void meta_window_maximize (MetaWindow *window,
@@ -438,11 +442,6 @@ gboolean meta_window_should_be_showing (MetaWindow *window);
/* See warning in window.c about this function */
gboolean __window_is_terminal (MetaWindow *window);
/* This recalcs the window/frame size, and recalcs the frame
* size/contents as well.
*/
void meta_window_queue_move_resize (MetaWindow *window);
void meta_window_update_struts (MetaWindow *window);
/* this gets root coords */
@@ -597,8 +596,6 @@ const char* meta_window_get_startup_id (MetaWindow *window);
void meta_window_recalc_features (MetaWindow *window);
void meta_window_recalc_window_type (MetaWindow *window);
void meta_window_queue_update_icon (MetaWindow *window);
void meta_window_stack_just_below (MetaWindow *window,
MetaWindow *below_this_one);

View File

@@ -168,7 +168,6 @@ meta_workspace_add_window (MetaWorkspace *workspace,
meta_window_set_current_workspace_hint (window);
meta_window_queue_calc_showing (window);
if (window->struts)
{
meta_topic (META_DEBUG_WORKAREA,
@@ -180,7 +179,7 @@ meta_workspace_add_window (MetaWorkspace *workspace,
/* queue a move_resize since changing workspaces may change
* the relevant struts
*/
meta_window_queue_move_resize (window);
meta_window_queue (window, META_QUEUE_CALC_SHOWING|META_QUEUE_MOVE_RESIZE);
}
void
@@ -215,8 +214,6 @@ meta_workspace_remove_window (MetaWorkspace *workspace,
meta_window_set_current_workspace_hint (window);
meta_window_queue_calc_showing (window);
if (window->struts)
{
meta_topic (META_DEBUG_WORKAREA,
@@ -228,7 +225,7 @@ meta_workspace_remove_window (MetaWorkspace *workspace,
/* queue a move_resize since changing workspaces may change
* the relevant struts
*/
meta_window_queue_move_resize (window);
meta_window_queue (window, META_QUEUE_CALC_SHOWING|META_QUEUE_MOVE_RESIZE);
}
void
@@ -267,7 +264,7 @@ meta_workspace_queue_calc_showing (MetaWorkspace *workspace)
tmp = workspace->windows;
while (tmp != NULL)
{
meta_window_queue_calc_showing (tmp->data);
meta_window_queue (tmp->data, META_QUEUE_CALC_SHOWING);
tmp = tmp->next;
}
@@ -480,7 +477,7 @@ meta_workspace_invalidate_work_area (MetaWorkspace *workspace)
{
MetaWindow *w = tmp->data;
meta_window_queue_move_resize (w);
meta_window_queue (w, META_QUEUE_MOVE_RESIZE);
tmp = tmp->next;
}