Compare commits

..

45 Commits

Author SHA1 Message Date
Cédric Valmary
ed7680c2f8 Update Occitan translation 2016-10-11 18:49:06 +00:00
Cédric Valmary
9f9d08c21e Update Occitan translation 2016-10-11 18:41:13 +00:00
Cédric Valmary
9d071443c7 Update Occitan translation 2016-10-11 17:52:13 +00:00
Jasper St. Pierre
31afdd4deb window: Don't try to map / unmap OR windows by ourselves
This is bad behavior, and can also cause us to get in an infinite loop
if an OR window is mapped and unmapped in quick succession. This
sequence causes a MapNotify followed by an UnmapNotify, and when
processing the events, we'll call XMapWindow, XUnmapWindow, which will
put another set of MapNotify, UnmapNotify events in our queue, which we
then process by calling XMapWindow, XUnmapWindow, and so it goes
forever, or at least some scheduler uncorks us by making us call
XMapWindow when the window is already mapped, or XUnmapWindow when the
window is already unmapped.

We can stop this madness by simply making sure never to call neither
XMapWindow or XUnmapWindow on OR windows, which is the correct thing to
do anyway.
2014-08-19 16:19:07 -04:00
Owen W. Taylor
170ff5e2e8 MetaTextureTower: actually mark revalidated levels as valid
We were never actually clearing the invalid area on the smaller levels
of the texture tower, so we recomputed those levels every time.

https://bugzilla.gnome.org/show_bug.cgi?id=734400
2014-08-07 15:57:34 +02:00
Adel Gadllah
f72f431a99 background: Do not assume GLSL is available
Some hardware does not support it causing crashes in cogl during paint.

https://bugzilla.gnome.org/show_bug.cgi?id=733623
2014-07-24 16:57:36 +02:00
Florian Müllner
e1841f722d boxes: Ignore struts that don't attach to the side they claim
Like the _NET_WM_STRUT/_NET_WM_STRUT_PARTIAL client properties,
_NET_WORKAREA is defined in terms of screen geometry rather than
taking individual monitors into account. However we do want to
allow system chrome to be attached to a monitor edge rather than
a screen edges under some circumstances. As not all clients can
be assumed to deal gracefully with the resulting workarea, use
those "struts" only internally for constraining windows, but
ignore them when exporting _NET_WORKAREA.

https://bugzilla.gnome.org/show_bug.cgi?id=730527
2014-06-13 17:16:25 +02:00
Florian Müllner
b850a8075f Bump version to 3.12.2
Update NEWS.
2014-05-14 10:43:26 +02:00
Giovanni Campagna
db0383d19f MetaIdleMonitorDBus: unref the objects after exporting them
The object manager already has a reference.

https://bugzilla.gnome.org/show_bug.cgi?id=729732
2014-05-07 19:09:35 +02:00
Giovanni Campagna
a175b3c947 default: free the option context after parsing
We don't need it, we should free it.

https://bugzilla.gnome.org/show_bug.cgi?id=729732
2014-05-07 19:09:12 +02:00
Giovanni Campagna
554be56639 MetaMonitorConfig: don't always restore the previous config when opening the laptop lid
Only do it if the current configuration was actually created
as the result of closing the laptop lid.

https://bugzilla.gnome.org/show_bug.cgi?id=725637
2014-05-06 21:31:46 +02:00
Giovanni Campagna
b4de2458ab MetaMonitorConfig: don't keep a previous config with the wrong outputs
We can only apply a configuration if its outputs match the connected
ones, so discard the current configuration if the set of output changes
(for example for hotplug), otherwise we will crash trying to apply
the bogus previous configuration.

https://bugzilla.gnome.org/show_bug.cgi?id=725637
2014-05-06 21:31:46 +02:00
Pau Iranzo
49952bdc69 [l10n] Update Catalan translation 2014-05-02 12:43:44 +02:00
Christian Kirbach
b2fd24a098 Updated German translation 2014-05-01 17:47:54 +00:00
Florian Müllner
fe9d2570d0 window: Queue a fullscreen check when moving between monitors
We track changes to windows fullscreen state and stacking order
to determine a monitor's in-fullscreen state, but missed the
obvious case of moving a fullscreen window between monitors.

https://bugzilla.gnome.org/show_bug.cgi?id=728395
2014-04-17 18:33:28 +02:00
Florian Müllner
b16ac1ba8c keybindings: Handle switch-to-workspace-{up,down,left,right} again
Commit 585fdd781c not only removed the tabpopup, but set invalid
handlers (a.k.a. NULL) for those shortcuts; add back handling of
basic handling of those shortcuts by switching instantly without any
popups.

https://bugzilla.gnome.org/show_bug.cgi?id=728423
2014-04-17 17:06:25 +02:00
Florian Müllner
330ce648d3 Bump version to 3.12.1
Update NEWS.
2014-04-15 21:56:45 +02:00
Nirbheek Chauhan
0c0973bbd8 window-props: _NET_WM_WINDOW_OPACITY range is 0xffffffff to 0
After reading the atom, scale the value from 0xffffffff to 0xff. Not doing so
causes Clutter to truncate the opacity value, and only read the last two digits.
Hence, 0x7fffffff (50%) becomes 0xff (100%).

https://bugzilla.gnome.org/show_bug.cgi?id=727874
2014-04-09 16:39:08 +02:00
marablack3
a967d479c5 Updated Greek translation 2014-04-07 18:39:18 +00:00
Inaki Larranaga Murgoitio
9707c1061d Updated Basque language 2014-03-30 15:07:44 +02:00
Inaki Larranaga Murgoitio
29cb77ce70 Updated Basque language 2014-03-30 12:51:39 +02:00
Jasper St. Pierre
f93fa1d705 window-actor: Don't queue a redraw when queueing a new pixmap
We guarantee ourselves that a valid pixmap will appear any time
that the window is painted. The window actor will be scheduled
for a repaint if it's added / removed from the scene graph, like
during construction, if the size changes, or if we receive damage,
which are the existing use cases where this function is called.

So, I can't see any reason that we queue a redraw in here.

With the split into surface actors, we don't have an easy place
we can use to queue a redraw, and since it's unnecessary, we can
just drop it on the floor.

https://bugzilla.gnome.org/show_bug.cgi?id=720631
2014-03-26 17:30:46 -04:00
Florian Müllner
a742b17805 Bump version to 3.12.0
Update NEWS.
2014-03-25 16:25:28 +01:00
Petr Kovar
c4b65e0e6e Update Czech translation 2014-03-22 20:49:28 +01:00
Daniel Korostil
9ec8232417 Updated Ukrainian translation 2014-03-22 12:18:24 +02:00
Andika Triwidada
768e830f11 Updated Indonesian translation 2014-03-21 10:42:48 +00:00
Мирослав Николић
4a4a624b77 Updated Serbian translation 2014-03-21 03:06:38 +01:00
Ask H. Larsen
b13b7ea72e Updated Danish translation 2014-03-19 22:33:10 +01:00
Florian Müllner
9a89cc1198 Bump version to 3.11.92
Update NEWS.
2014-03-19 21:26:42 +01:00
A S Alam
b8eb7b883f update Punjabi Translation 17March2014: Alam 2014-03-17 16:04:20 -05:00
Jasper St. Pierre
4f9872c037 window: Export a bunch of state flags as accessor methods
This is necessary to reimplement window menus in gnome-shell.

https://bugzilla.gnome.org/show_bug.cgi?id=726352
2014-03-14 11:25:55 -04:00
Jasper St. Pierre
24e12053ea window: Add a META_MAXIMIZE_BOTH maximization flag
Which has both directions set. This is a simple cleanup to
remove the constant VERTICAL | HORIZONTAL all over the place.

https://bugzilla.gnome.org/show_bug.cgi?id=726352
2014-03-14 11:25:55 -04:00
Carlos Garnacho
991c85f6a0 core: Add minimal handling of touch events
Currently touch events are ignored in the core event handler,
and hence dealt with within GDK. If those touch events were
emulating pointer events, GDK would attempt to convert back
those events to pointer events as the frame GdkWindow doesn't
have the GDK_TOUCH_MASK set.

This results in XI_TouchBegin events being initially processed
by GDK, converted to button events, and triggering a grab op
that subverts touch events into pointer events, so the touch
is never ever seen again by GDK. This leaves GDK in an
inconsistent internal state wrt pointer grabs, so future
pointer-emulating touches will refer to the same window forever.

Fix this by handling touch events minimally, just enough to
convert XI_TouchBegin to GDK_BUTTON_PRESS within mutter, so GDK
is bypassed for every touch event just like it is for pointer
events. This, and the XIGrabDevice() that keeps coercing pointer
events when the grab operation starts, are enough to fix window
drag and drop on touch devices.

https://bugzilla.gnome.org/show_bug.cgi?id=723552
2014-03-13 20:10:07 +01:00
Duarte Loreto
4880ee9bb6 Updated Portuguese translation 2014-03-12 01:42:39 +00:00
Claude Paroz
2f77b71933 Updated French translation 2014-03-11 22:50:41 +01:00
Owen W. Taylor
47273eaab6 Fix identification of CSD windows when checking whether to force fullscreen
We try to exempt CSD windows from being forced fullscreen if they are
undecorated and the size of the screen; however, we also catch almost
all windows that *do* need to be forced fullscreen in this check, since
they also have decorations turned off.

Identify actual CSD windows by checking whether _GTK_FRAME_EXTENTS is set -
GTK+ will always set this on CSD windows even if they have no invisible
borders or shadows at the current time.

https://bugzilla.gnome.org/show_bug.cgi?id=723029
2014-03-11 12:36:55 -04:00
Owen W. Taylor
202e6bd654 Fix meta_window_titlebar_is_onscreen() for titlebar-less windows
Make the code correspond to the comment - the titlebar can't be
offscreen if there's no titlebar.

https://bugzilla.gnome.org/show_bug.cgi?id=723580
2014-03-11 12:36:55 -04:00
Tiagosdot
fd41ab93da Updated Portuguese translation 2014-03-11 16:13:04 +00:00
Yuri Myasoedov
a07fe23d7a Updated Russian translation 2014-03-11 16:03:54 +04:00
Chao-Hsiung Liao
ef0763fd04 Updated Traditional Chinese translation(Hong Kong and Taiwan) 2014-03-09 13:05:59 +08:00
Wylmer Wang
b5ef6703fc Updated Chinese (China) translation 2014-03-08 11:52:01 +00:00
Rūdolfs Mazurs
dde25e831f Updated Latvian translation 2014-03-07 23:23:53 +02:00
Rui Matos
8358b5dd24 cursor-tracker: Include gdk/gdkx.h
Needed for the call to gdk_x11_device_manager_lookup() introduced
in in the previous commit.
2014-03-06 19:19:52 +01:00
Adel Gadllah
34a9c95b7f cursor-tracker: Avoid unnecessary round trip 2014-03-06 19:17:50 +01:00
Changwoo Ryu
dd76c92f30 Updated Korean translation 2014-03-07 02:11:01 +09:00
39 changed files with 7956 additions and 9406 deletions

44
NEWS
View File

@@ -1,3 +1,47 @@
3.12.2
======
* Fix in-fullscreen state when moving between monitors [Florian; #728395]
* Fix crash when monitors change during suspend [Giovanni; #725637]
* Misc. bug fixes [Florian, Giovanni; #728423, #729732]
Contributors:
Giovanni Campagna, Florian Müllner
Translations:
Christian Kirbach [de], Pau Iranzo [ca]
3.12.1
======
* Fix opacity values from _NET_WM_WINDOW_OPACITY [Nirbheek; #727874]
* Misc. cleanups [Jasper; #720631]
Contributors:
Nirbheek Chauhan, Jasper St. Pierre
Translations:
Inaki Larranaga Murgoitio [eu], marablack3 [el]
3.12.0
======
Translations:
Ask H. Larsen [da], Мирослав Николић [sr, sr@latin], Andika Triwidada [id],
Daniel Korostil [uk], Petr Kovar [cs]
3.11.92
=======
* Fix identification of CSD windows [Owen; #723029]
* Add minimal handling of touch events [Carlos; #723552]
* Misc bug fixes and cleanups [Owen, Adel, Jasper; #723580, #726352]
Contributors:
Adel Gadllah, Carlos Garnacho, Rui Matos, Jasper St. Pierre, Owen W. Taylor
Translations:
Changwoo Ryu [ko], Rūdolfs Mazurs [lv], Wylmer Wang [zh_CN],
Chao-Hsiung Liao [zh_HK, zh_TW], Yuri Myasoedov [ru], Tiagosdot [pt],
Claude Paroz [fr], Duarte Loreto [pt], A S Alam [pa]
3.11.91
=======
* Don't use keysym to match keybindings [Rui; #678001]

View File

@@ -2,8 +2,8 @@ AC_PREREQ(2.50)
AC_CONFIG_MACRO_DIR([m4])
m4_define([mutter_major_version], [3])
m4_define([mutter_minor_version], [11])
m4_define([mutter_micro_version], [91])
m4_define([mutter_minor_version], [12])
m4_define([mutter_micro_version], [2])
m4_define([mutter_version],
[mutter_major_version.mutter_minor_version.mutter_micro_version])

531
po/ca.po

File diff suppressed because it is too large Load Diff

147
po/cs.po
View File

@@ -5,24 +5,23 @@
# Miloslav Trmac <mitr@volny.cz>, 2002, 2003, 2004, 2005, 2006.
# Petr Tomeš <ptomes@gmail.com>, 2006.
# Jakub Friedl <jfriedl@suse.cz>, 2006, 2007.
# Petr Kovar <pknbe@volny.cz>, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
# Petr Kovar <pknbe@volny.cz>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014.
# Marek Černocký <marek@manet.cz>, 2012, 2013, 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-02-08 22:53+0000\n"
"PO-Revision-Date: 2014-02-09 09:49+0100\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter"
"&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-03-22 11:01+0000\n"
"PO-Revision-Date: 2014-03-22 20:48+0200\n"
"Last-Translator: Petr Kovar <pknbe@volny.cz>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Gtranslator 2.91.6\n"
"X-Generator: Virtaal 0.7.1\n"
"X-Project-Style: gnome\n"
#: ../src/50-mutter-navigation.xml.in.h:1
@@ -62,66 +61,86 @@ msgid "Move window one workspace down"
msgstr "Přesunout okno o plochu dolů"
#: ../src/50-mutter-navigation.xml.in.h:10
#| msgid "Move window one workspace to the left"
msgid "Move window one monitor to the left"
msgstr "Přesunout okno o monitor doleva"
#: ../src/50-mutter-navigation.xml.in.h:11
#| msgid "Move window one workspace to the right"
msgid "Move window one monitor to the right"
msgstr "Přesunout okno o monitor doprava"
#: ../src/50-mutter-navigation.xml.in.h:12
#| msgid "Move window one workspace up"
msgid "Move window one monitor up"
msgstr "Přesunout okno o monitor nahoru"
#: ../src/50-mutter-navigation.xml.in.h:13
#| msgid "Move window one workspace down"
msgid "Move window one monitor down"
msgstr "Přesunout okno o monitor dolů"
#: ../src/50-mutter-navigation.xml.in.h:14
msgid "Switch applications"
msgstr "Přepnout mezi aplikacemi"
#: ../src/50-mutter-navigation.xml.in.h:11
#: ../src/50-mutter-navigation.xml.in.h:15
msgid "Switch windows"
msgstr "Přepnout mezi okny"
#: ../src/50-mutter-navigation.xml.in.h:12
#: ../src/50-mutter-navigation.xml.in.h:16
msgid "Switch windows of an application"
msgstr "Přepnout mezi okny aplikace"
#: ../src/50-mutter-navigation.xml.in.h:13
#: ../src/50-mutter-navigation.xml.in.h:17
msgid "Switch system controls"
msgstr "Přepnout mezi systémovými ovládacími prvky"
#: ../src/50-mutter-navigation.xml.in.h:14
#: ../src/50-mutter-navigation.xml.in.h:18
msgid "Switch windows directly"
msgstr "Přepnout přímo mezi okny"
#: ../src/50-mutter-navigation.xml.in.h:15
#: ../src/50-mutter-navigation.xml.in.h:19
msgid "Switch windows of an app directly"
msgstr "Přepnout přímo mezi okny aplikace"
#: ../src/50-mutter-navigation.xml.in.h:16
#: ../src/50-mutter-navigation.xml.in.h:20
msgid "Switch system controls directly"
msgstr "Přepnout přímo mezi systémovými ovládacími prvky"
#: ../src/50-mutter-navigation.xml.in.h:17
#: ../src/50-mutter-navigation.xml.in.h:21
msgid "Hide all normal windows"
msgstr "Skrýt všechna běžná okna"
#: ../src/50-mutter-navigation.xml.in.h:18
#: ../src/50-mutter-navigation.xml.in.h:22
msgid "Switch to workspace 1"
msgstr "Přepnout na plochu 1"
#: ../src/50-mutter-navigation.xml.in.h:19
#: ../src/50-mutter-navigation.xml.in.h:23
msgid "Switch to workspace 2"
msgstr "Přepnout na plochu 2"
#: ../src/50-mutter-navigation.xml.in.h:20
#: ../src/50-mutter-navigation.xml.in.h:24
msgid "Switch to workspace 3"
msgstr "Přepnout na plochu 3"
#: ../src/50-mutter-navigation.xml.in.h:21
#: ../src/50-mutter-navigation.xml.in.h:25
msgid "Switch to workspace 4"
msgstr "Přepnout na plochu 4"
#: ../src/50-mutter-navigation.xml.in.h:22
#: ../src/50-mutter-navigation.xml.in.h:26
msgid "Move to workspace left"
msgstr "Přesunout na plochu vlevo"
#: ../src/50-mutter-navigation.xml.in.h:23
#: ../src/50-mutter-navigation.xml.in.h:27
msgid "Move to workspace right"
msgstr "Přesunout na plochu vpravo"
#: ../src/50-mutter-navigation.xml.in.h:24
#: ../src/50-mutter-navigation.xml.in.h:28
msgid "Move to workspace above"
msgstr "Přesunout na plochu nad"
#: ../src/50-mutter-navigation.xml.in.h:25
#: ../src/50-mutter-navigation.xml.in.h:29
msgid "Move to workspace below"
msgstr "Přesunout na plochu pod"
@@ -216,22 +235,22 @@ msgstr "Zobrazit rozdělení napravo"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:542
#: ../src/compositor/compositor.c:534
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display \"%s"
"\"."
msgstr "Jiný kompozitní správce již běží na obrazovce %i displeje „%s“."
#: ../src/compositor/meta-background.c:1073
#: ../src/compositor/meta-background.c:1074
msgid "background texture could not be created from file"
msgstr "textura pozadí nemohla být ze souboru vytvořena"
#: ../src/core/bell.c:320
#: ../src/core/bell.c:321
msgid "Bell event"
msgstr "Událost zvonku"
#: ../src/core/core.c:155
#: ../src/core/core.c:156
#, c-format
msgid "Unknown window information request: %d"
msgstr "Neznámý informační požadavek okna: %d"
@@ -261,17 +280,17 @@ msgstr "_Počkat"
msgid "_Force Quit"
msgstr "_Vynutit ukončení"
#: ../src/core/display.c:413
#: ../src/core/display.c:405
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Schází rozšíření %s vyžadované funkcemi kompozitoru"
#: ../src/core/display.c:505
#: ../src/core/display.c:497
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Nelze otevřít displej X Window System „%s“\n"
#: ../src/core/keybindings.c:1135
#: ../src/core/keybindings.c:1105
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@@ -279,7 +298,7 @@ msgid ""
msgstr ""
"Klávesu %s s modifikátory %x již jako zkratku používá nějaký jiný program\n"
#: ../src/core/keybindings.c:1332
#: ../src/core/keybindings.c:1308
#, c-format
msgid "\"%s\" is not a valid accelerator\n"
msgstr "„%s“ není platný akcelerátor\n"
@@ -308,12 +327,12 @@ msgstr "Spustí sezení z uloženého souboru"
msgid "Make X calls synchronous"
msgstr "Provede volání X synchronně"
#: ../src/core/main.c:536
#: ../src/core/main.c:544
#, c-format
msgid "Failed to scan themes directory: %s\n"
msgstr "Nelze prohledat adresář motivů: %s\n"
#: ../src/core/main.c:552
#: ../src/core/main.c:560
#, c-format
msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@@ -341,7 +360,7 @@ msgstr "Neznámý displej"
msgid "%s %s"
msgstr "%s %s"
#: ../src/core/mutter.c:38
#: ../src/core/mutter.c:39
#, c-format
msgid ""
"mutter %s\n"
@@ -357,15 +376,15 @@ msgstr ""
"Tento software je BEZ JAKÉKOLIV ZÁRUKY; neposkytují se ani záruky "
"PRODEJNOSTI anebo VHODNOSTI PRO URČITÝ ÚČEL.\n"
#: ../src/core/mutter.c:52
#: ../src/core/mutter.c:53
msgid "Print version"
msgstr "Vypíše verzi"
#: ../src/core/mutter.c:58
#: ../src/core/mutter.c:59
msgid "Mutter plugin to use"
msgstr "Zásuvný modul Mutter, který se má použít"
#: ../src/core/prefs.c:1200
#: ../src/core/prefs.c:1190
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -373,12 +392,12 @@ msgstr ""
"Bylo zakázáno obcházení chyb aplikací. Některé aplikace se možná nebudou "
"chovat správně.\n"
#: ../src/core/prefs.c:1275
#: ../src/core/prefs.c:1265
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Nelze zpracovat popis písma „%s“ v klíči GSettings %s\n"
#: ../src/core/prefs.c:1341
#: ../src/core/prefs.c:1331
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -387,7 +406,7 @@ msgstr ""
"„%s“ nalezené v databázi nastavení není platnou hodnotou modifikátoru "
"tlačítka myši\n"
#: ../src/core/prefs.c:1907
#: ../src/core/prefs.c:1894
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -396,17 +415,17 @@ msgstr ""
"„%s“ nalezené v databázi nastavení není platnou hodnotou klávesové zkratky "
"„%s“\n"
#: ../src/core/prefs.c:1997
#: ../src/core/prefs.c:1984
#, c-format
msgid "Workspace %d"
msgstr "Plocha %d"
#: ../src/core/screen.c:537
#: ../src/core/screen.c:539
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Obrazovka %d na displeji „%s“ je neplatná\n"
#: ../src/core/screen.c:553
#: ../src/core/screen.c:555
#, c-format
msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
@@ -415,70 +434,70 @@ msgstr ""
"Obrazovka %d na displeji „%s“ již správce oken má; zkuste prosím nahradit "
"aktuálního správce oken pomocí přepínače --replace.\n"
#: ../src/core/screen.c:580
#: ../src/core/screen.c:582
#, c-format
msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
msgstr "Nelze získat výběr správce oken na obrazovce %d displeje „%s“\n"
#: ../src/core/screen.c:658
#: ../src/core/screen.c:660
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Obrazovka %d na displeji „%s“ již má správce oken\n"
#: ../src/core/screen.c:850
#: ../src/core/screen.c:848
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Nelze uvolnit obrazovku %d na displeji „%s“\n"
#: ../src/core/session.c:841 ../src/core/session.c:848
#: ../src/core/session.c:842 ../src/core/session.c:849
#, c-format
msgid "Could not create directory '%s': %s\n"
msgstr "Nelze vytvořit adresář „%s“: %s\n"
#: ../src/core/session.c:858
#: ../src/core/session.c:859
#, c-format
msgid "Could not open session file '%s' for writing: %s\n"
msgstr "Nelze otevřít soubor sezení „%s“ k zápisu: %s\n"
#: ../src/core/session.c:999
#: ../src/core/session.c:1000
#, c-format
msgid "Error writing session file '%s': %s\n"
msgstr "Chyba při zápisu souboru sezení „%s“: %s\n"
#: ../src/core/session.c:1004
#: ../src/core/session.c:1005
#, c-format
msgid "Error closing session file '%s': %s\n"
msgstr "Chyba při zavírání souboru sezení „%s“: %s\n"
#: ../src/core/session.c:1134
#: ../src/core/session.c:1135
#, c-format
msgid "Failed to parse saved session file: %s\n"
msgstr "Chyba při analyzování uloženého souboru sezení: %s\n"
#: ../src/core/session.c:1183
#: ../src/core/session.c:1184
#, c-format
msgid "<mutter_session> attribute seen but we already have the session ID"
msgstr "nalezen atribut <mutter_session>, ale ID sezení už k dispozici je"
#: ../src/core/session.c:1196 ../src/core/session.c:1271
#: ../src/core/session.c:1303 ../src/core/session.c:1375
#: ../src/core/session.c:1435
#: ../src/core/session.c:1197 ../src/core/session.c:1272
#: ../src/core/session.c:1304 ../src/core/session.c:1376
#: ../src/core/session.c:1436
#, c-format
msgid "Unknown attribute %s on <%s> element"
msgstr "Neznámý atribut %s prvku <%s>"
#: ../src/core/session.c:1213
#: ../src/core/session.c:1214
#, c-format
msgid "nested <window> tag"
msgstr "vnořená značka <window>"
#: ../src/core/session.c:1455
#: ../src/core/session.c:1456
#, c-format
msgid "Unknown element %s"
msgstr "Neznámý prvek %s"
#: ../src/core/session.c:1807
#: ../src/core/session.c:1808
msgid ""
"These windows do not support &quot;save current setup&quot; and will have to "
"be restarted manually next time you log in."
@@ -522,7 +541,7 @@ msgid "Window manager error: "
msgstr "Chyba správce oken: "
#. first time through
#: ../src/core/window.c:7589
#: ../src/core/window.c:7562
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -538,7 +557,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:8513
#: ../src/core/window.c:8487
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -548,22 +567,22 @@ msgstr ""
"velikost, ale nastavuje min. velikost %d × %d a max. velikost %d × %d; to "
"nedává smysl.\n"
#: ../src/core/window-props.c:348
#: ../src/core/window-props.c:349
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Aplikace nastavila neplatný _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:464
#: ../src/core/window-props.c:465
#, c-format
msgid "%s (on %s)"
msgstr "%s (na %s)"
#: ../src/core/window-props.c:1547
#: ../src/core/window-props.c:1548
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Neplatné okno WM_TRANSIENT_FOR 0x%lx specifikováno pro %s.\n"
#: ../src/core/window-props.c:1558
#: ../src/core/window-props.c:1559
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "Okno WM_TRANSIENT_FOR 0x%lx by vytvořilo smyčku pro %s.\n"

519
po/da.po

File diff suppressed because it is too large Load Diff

531
po/de.po

File diff suppressed because it is too large Load Diff

3558
po/el.po

File diff suppressed because it is too large Load Diff

787
po/eu.po

File diff suppressed because it is too large Load Diff

687
po/fr.po

File diff suppressed because it is too large Load Diff

525
po/id.po

File diff suppressed because it is too large Load Diff

535
po/ko.po

File diff suppressed because it is too large Load Diff

532
po/lv.po

File diff suppressed because it is too large Load Diff

3682
po/oc.po

File diff suppressed because it is too large Load Diff

528
po/pa.po

File diff suppressed because it is too large Load Diff

533
po/pt.po

File diff suppressed because it is too large Load Diff

996
po/ru.po

File diff suppressed because it is too large Load Diff

553
po/sr.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

140
po/uk.po
View File

@@ -7,8 +7,8 @@ msgstr ""
"Project-Id-Version: metacity\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter"
"&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-02-13 02:27+0000\n"
"PO-Revision-Date: 2014-02-13 11:14+0300\n"
"POT-Creation-Date: 2014-03-16 22:53+0000\n"
"PO-Revision-Date: 2014-03-17 12:39+0300\n"
"Last-Translator: Daniel Korostil <ted.korostiled@gmail.com>\n"
"Language-Team: linux.org.ua\n"
"Language: uk\n"
@@ -57,67 +57,86 @@ msgid "Move window one workspace down"
msgstr "Перемістити вікно на робочий простір нижче"
#: ../src/50-mutter-navigation.xml.in.h:10
#| msgid "Move window one workspace to the left"
msgid "Move window one monitor to the left"
msgstr "Перемістити вікно на монітор ліворуч"
#: ../src/50-mutter-navigation.xml.in.h:11
#| msgid "Move window one workspace to the right"
msgid "Move window one monitor to the right"
msgstr "Перемістити вікно на монітор праворуч"
#: ../src/50-mutter-navigation.xml.in.h:12
#| msgid "Move window one workspace up"
msgid "Move window one monitor up"
msgstr "Перемістити вікно на монітор вище"
#: ../src/50-mutter-navigation.xml.in.h:13
#| msgid "Move window one workspace down"
msgid "Move window one monitor down"
msgstr "Перемістити вікно на монітор нижче"
#: ../src/50-mutter-navigation.xml.in.h:14
msgid "Switch applications"
msgstr "Перемкнути програми"
#: ../src/50-mutter-navigation.xml.in.h:11
#| msgid "Switch windows directly"
#: ../src/50-mutter-navigation.xml.in.h:15
msgid "Switch windows"
msgstr "Перемкнути вікна"
#: ../src/50-mutter-navigation.xml.in.h:12
#: ../src/50-mutter-navigation.xml.in.h:16
msgid "Switch windows of an application"
msgstr "Перемкнути вікна програм"
#: ../src/50-mutter-navigation.xml.in.h:13
#: ../src/50-mutter-navigation.xml.in.h:17
msgid "Switch system controls"
msgstr "Перемкнути системні керування"
#: ../src/50-mutter-navigation.xml.in.h:14
#: ../src/50-mutter-navigation.xml.in.h:18
msgid "Switch windows directly"
msgstr "Перемкнути вікна напряму"
#: ../src/50-mutter-navigation.xml.in.h:15
#: ../src/50-mutter-navigation.xml.in.h:19
msgid "Switch windows of an app directly"
msgstr "Перемкнути вікна програм напряму"
#: ../src/50-mutter-navigation.xml.in.h:16
#: ../src/50-mutter-navigation.xml.in.h:20
msgid "Switch system controls directly"
msgstr "Перемкнути системні керування напряму"
#: ../src/50-mutter-navigation.xml.in.h:17
#: ../src/50-mutter-navigation.xml.in.h:21
msgid "Hide all normal windows"
msgstr "Сховати всі звичайні вікна"
#: ../src/50-mutter-navigation.xml.in.h:18
#: ../src/50-mutter-navigation.xml.in.h:22
msgid "Switch to workspace 1"
msgstr "Перейти до робочого простору 1"
#: ../src/50-mutter-navigation.xml.in.h:19
#: ../src/50-mutter-navigation.xml.in.h:23
msgid "Switch to workspace 2"
msgstr "Перейти до робочого простору 2"
#: ../src/50-mutter-navigation.xml.in.h:20
#: ../src/50-mutter-navigation.xml.in.h:24
msgid "Switch to workspace 3"
msgstr "Перейти до робочого простору 3"
#: ../src/50-mutter-navigation.xml.in.h:21
#: ../src/50-mutter-navigation.xml.in.h:25
msgid "Switch to workspace 4"
msgstr "Перейти до робочого простору 4"
#: ../src/50-mutter-navigation.xml.in.h:22
#: ../src/50-mutter-navigation.xml.in.h:26
msgid "Move to workspace left"
msgstr "Перейти до робочого простору ліворуч"
#: ../src/50-mutter-navigation.xml.in.h:23
#: ../src/50-mutter-navigation.xml.in.h:27
msgid "Move to workspace right"
msgstr "Перейти до робочого простору праворуч"
#: ../src/50-mutter-navigation.xml.in.h:24
#: ../src/50-mutter-navigation.xml.in.h:28
msgid "Move to workspace above"
msgstr "Перейти до робочого простору вище"
#: ../src/50-mutter-navigation.xml.in.h:25
#: ../src/50-mutter-navigation.xml.in.h:29
msgid "Move to workspace below"
msgstr "Перейти до робочого простору знизу"
@@ -212,29 +231,28 @@ msgstr "Перегляд розділити праворуч"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:542
#: ../src/compositor/compositor.c:534
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display \"%s"
"\"."
msgstr "Уже запущено інший композитний менеджер на екрані %i через показ «%s»."
#: ../src/compositor/meta-background.c:1073
#: ../src/compositor/meta-background.c:1074
msgid "background texture could not be created from file"
msgstr "будову тла неможливо створити з файла"
#: ../src/core/bell.c:320
#: ../src/core/bell.c:321
msgid "Bell event"
msgstr "Подія гудка"
#: ../src/core/core.c:155
#: ../src/core/core.c:156
#, c-format
msgid "Unknown window information request: %d"
msgstr "Запит інформації невідомого вікна: %d"
#: ../src/core/delete.c:109
#, c-format
#| msgid "%s is not responding."
msgid "“%s” is not responding."
msgstr "«%s» не відповідає."
@@ -257,26 +275,25 @@ msgstr "_Зачекати"
msgid "_Force Quit"
msgstr "_Завершити примусово"
#: ../src/core/display.c:413
#: ../src/core/display.c:405
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Нема розширення %s, яке потрібне для композитного режиму"
#: ../src/core/display.c:505
#: ../src/core/display.c:497
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Не вдалось відкрити дисплей віконної системи X «%s»\n"
#: ../src/core/keybindings.c:1135
#: ../src/core/keybindings.c:1105
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
"binding\n"
msgstr "Клавішу «%s» з модифікаторами «%x» вже використовує інша програма\n"
#: ../src/core/keybindings.c:1332
#: ../src/core/keybindings.c:1308
#, c-format
#| msgid "\"%s\" is not a valid value for focus attribute"
msgid "\"%s\" is not a valid accelerator\n"
msgstr "«%s» — недійсний акселератор\n"
@@ -337,7 +354,7 @@ msgstr "Невідомий екран"
msgid "%s %s"
msgstr "%s %s"
#: ../src/core/mutter.c:38
#: ../src/core/mutter.c:39
#, c-format
msgid ""
"mutter %s\n"
@@ -352,15 +369,15 @@ msgstr ""
"Не надається НІЯКИХ гарантій; навіть ПРИДАТНОСТІ ДЛЯ ПРОДАЖУ чи "
"ВІДПОВІДНОСТІ ПЕВНІЙ МЕТІ.\n"
#: ../src/core/mutter.c:52
#: ../src/core/mutter.c:53
msgid "Print version"
msgstr "Показати версію"
#: ../src/core/mutter.c:58
#: ../src/core/mutter.c:59
msgid "Mutter plugin to use"
msgstr "Додатки Clutter для використання"
#: ../src/core/prefs.c:1200
#: ../src/core/prefs.c:1190
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@@ -368,12 +385,12 @@ msgstr ""
"Обхід для роботи із зіпсованими програмами вимкнено. Деякі додатки можуть "
"працювати некоректно.\n"
#: ../src/core/prefs.c:1275
#: ../src/core/prefs.c:1265
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Неможливо проаналізувати опис шрифту «%s» у ключі GSettings %s\n"
#: ../src/core/prefs.c:1341
#: ../src/core/prefs.c:1331
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@@ -382,7 +399,7 @@ msgstr ""
"У базі даних налаштування знайдено «%s» — що не є правильним значенням "
"модифікатора клавіші миші.\n"
#: ../src/core/prefs.c:1907
#: ../src/core/prefs.c:1894
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@@ -391,17 +408,17 @@ msgstr ""
"Знайдене у базі даних налаштування значення «%s» не є правильним записом "
"прив'язки клавіш «%s»\n"
#: ../src/core/prefs.c:1997
#: ../src/core/prefs.c:1984
#, c-format
msgid "Workspace %d"
msgstr "Робочий простір %d"
#: ../src/core/screen.c:537
#: ../src/core/screen.c:539
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Екран %d на дисплеї «%s» не правильний\n"
#: ../src/core/screen.c:553
#: ../src/core/screen.c:555
#, c-format
msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
@@ -410,7 +427,7 @@ msgstr ""
"Екран %d на дисплеї «%s» вже має менеджера вікон; спробуйте вказати параметр "
"--replace, щоб замінити поточний менеджер вікон.\n"
#: ../src/core/screen.c:580
#: ../src/core/screen.c:582
#, c-format
msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
@@ -418,64 +435,64 @@ msgstr ""
"Не вдалось одержати функцію виділення менеджеру вікон на екрані %d дисплею "
"«%s»\n"
#: ../src/core/screen.c:658
#: ../src/core/screen.c:660
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Екран %d на дисплеї «%s» вже має менеджера вікон\n"
#: ../src/core/screen.c:850
#: ../src/core/screen.c:848
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Не вдалось відпустити екран %d на дисплеї «%s»\n"
#: ../src/core/session.c:841 ../src/core/session.c:848
#: ../src/core/session.c:842 ../src/core/session.c:849
#, c-format
msgid "Could not create directory '%s': %s\n"
msgstr "Не вдалось створити каталог «%s»: %s\n"
#: ../src/core/session.c:858
#: ../src/core/session.c:859
#, c-format
msgid "Could not open session file '%s' for writing: %s\n"
msgstr "Не вдалось відкрити для запису файл сеансу «%s»: %s\n"
#: ../src/core/session.c:999
#: ../src/core/session.c:1000
#, c-format
msgid "Error writing session file '%s': %s\n"
msgstr "Помилка запису файла сеансу \"%s\": %s\n"
#: ../src/core/session.c:1004
#: ../src/core/session.c:1005
#, c-format
msgid "Error closing session file '%s': %s\n"
msgstr "Помилка закриття файла сеансу «%s»: %s\n"
#: ../src/core/session.c:1134
#: ../src/core/session.c:1135
#, c-format
msgid "Failed to parse saved session file: %s\n"
msgstr "Збій аналізування збереженого файла сеансу: %s\n"
#: ../src/core/session.c:1183
#: ../src/core/session.c:1184
#, c-format
msgid "<mutter_session> attribute seen but we already have the session ID"
msgstr "Прочитано атрибут <mutter_session>, але вже є ідентифікатор сеансу"
#: ../src/core/session.c:1196 ../src/core/session.c:1271
#: ../src/core/session.c:1303 ../src/core/session.c:1375
#: ../src/core/session.c:1435
#: ../src/core/session.c:1197 ../src/core/session.c:1272
#: ../src/core/session.c:1304 ../src/core/session.c:1376
#: ../src/core/session.c:1436
#, c-format
msgid "Unknown attribute %s on <%s> element"
msgstr "Невідомий атрибут %s у елементі <%s>"
#: ../src/core/session.c:1213
#: ../src/core/session.c:1214
#, c-format
msgid "nested <window> tag"
msgstr "вкладена мітка <window>"
#: ../src/core/session.c:1455
#: ../src/core/session.c:1456
#, c-format
msgid "Unknown element %s"
msgstr "Невідомий елемент %s"
#: ../src/core/session.c:1807
#: ../src/core/session.c:1808
msgid ""
"These windows do not support &quot;save current setup&quot; and will have to "
"be restarted manually next time you log in."
@@ -519,7 +536,7 @@ msgid "Window manager error: "
msgstr "Помилка віконного менеджера:"
#. first time through
#: ../src/core/window.c:7589
#: ../src/core/window.c:7562
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -535,7 +552,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:8513
#: ../src/core/window.c:8487
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -545,22 +562,22 @@ msgstr ""
"змінюватись, але встановило мінімальний розмір %d x %d та максимальний %d x "
"%d;, в чому не має сенсу.\n"
#: ../src/core/window-props.c:348
#: ../src/core/window-props.c:349
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Програма встановила неправильне значення параметра _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:464
#: ../src/core/window-props.c:465
#, c-format
msgid "%s (on %s)"
msgstr "%s (на %s)"
#: ../src/core/window-props.c:1547
#: ../src/core/window-props.c:1548
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Неправильний параметр WM_TRANSIENT_FOR вікна 0x%lx вказано для %s.\n"
#: ../src/core/window-props.c:1558
#: ../src/core/window-props.c:1559
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "Вікно WM_TRANSIENT_FOR 0x%lx для %s створило б петлю.\n"
@@ -683,11 +700,6 @@ msgid "Delay focus changes until the pointer stops moving"
msgstr "Затримувати зміни фокусу, поки вказівник не перестане рухатись"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#| msgid ""
#| "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
#| "the focused window will be automatically raised after a delay specified "
#| "by the auto_raise_delay key. This is not related to clicking on a window "
#| "to raise it, nor to entering a window during drag-and-drop."
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -500,7 +500,8 @@ set_brightness (MetaBackground *self,
priv->brightness = brightness;
if (priv->effects & META_BACKGROUND_EFFECTS_VIGNETTE)
if (clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL) &&
priv->effects & META_BACKGROUND_EFFECTS_VIGNETTE)
{
ensure_pipeline (self);
cogl_pipeline_set_uniform_1f (priv->pipeline,
@@ -508,6 +509,14 @@ set_brightness (MetaBackground *self,
"brightness"),
priv->brightness);
}
else
{
ensure_pipeline (self);
CoglColor blend_color;
cogl_color_init_from_4f (&blend_color, brightness, brightness, brightness, 1.0);
cogl_pipeline_set_layer_combine (priv->pipeline, 1, "RGB=MODULATE(PREVIOUS, CONSTANT) A=REPLACE(PREVIOUS)", NULL);
cogl_pipeline_set_layer_combine_constant (priv->pipeline, 1, &blend_color);
}
clutter_content_invalidate (CLUTTER_CONTENT (self));
@@ -525,6 +534,9 @@ set_vignette_sharpness (MetaBackground *self,
priv->vignette_sharpness = sharpness;
if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL))
return;
if (priv->effects & META_BACKGROUND_EFFECTS_VIGNETTE)
{
ensure_pipeline (self);
@@ -545,6 +557,9 @@ add_vignette (MetaBackground *self)
MetaBackgroundPrivate *priv = self->priv;
static CoglSnippet *snippet = NULL;
if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL))
return;
ensure_pipeline (self);
/* Cogl automatically caches pipelines with no eviction policy,

View File

@@ -432,6 +432,9 @@ texture_tower_revalidate (MetaTextureTower *tower,
int level)
{
texture_tower_revalidate_fbo (tower, level);
tower->invalid[level].x1 = tower->invalid[level].x2 = 0;
tower->invalid[level].y1 = tower->invalid[level].y2 = 0;
}
/**

View File

@@ -687,7 +687,7 @@ meta_window_actor_has_shadow (MetaWindowActor *self)
/* Leaving out shadows for maximized and fullscreen windows is an effeciency
* win and also prevents the unsightly effect of the shadow of maximized
* window appearing on an adjacent window */
if ((meta_window_get_maximized (priv->window) == (META_MAXIMIZE_HORIZONTAL | META_MAXIMIZE_VERTICAL)) ||
if ((meta_window_get_maximized (priv->window) == META_MAXIMIZE_BOTH) ||
meta_window_is_fullscreen (priv->window))
return FALSE;
@@ -968,27 +968,6 @@ is_frozen (MetaWindowActor *self)
return self->priv->freeze_count ? TRUE : FALSE;
}
static void
meta_window_actor_queue_create_pixmap (MetaWindowActor *self)
{
MetaWindowActorPrivate *priv = self->priv;
priv->needs_pixmap = TRUE;
if (is_frozen (self))
return;
/* This will cause the compositor paint function to be run
* if the actor is visible or a clone of the actor is visible.
* if the actor isn't visible in any way, then we don't
* need to repair the window anyways, and can wait until
* the stage is redrawn for some other reason
*
* The compositor paint function repairs all windows.
*/
clutter_actor_queue_redraw (priv->actor);
}
static gboolean
is_freeze_thaw_effect (gulong event)
{
@@ -1172,7 +1151,7 @@ meta_window_actor_detach (MetaWindowActor *self)
XFreePixmap (xdisplay, priv->back_pixmap);
priv->back_pixmap = None;
meta_window_actor_queue_create_pixmap (self);
priv->needs_pixmap = TRUE;
}
gboolean
@@ -1311,7 +1290,7 @@ meta_window_actor_sync_actor_geometry (MetaWindowActor *self,
if (priv->size_changed)
{
meta_window_actor_queue_create_pixmap (self);
priv->needs_pixmap = TRUE;
meta_window_actor_update_shape (self);
}
@@ -1484,7 +1463,7 @@ meta_window_actor_new (MetaWindow *window)
priv->last_width = -1;
priv->last_height = -1;
meta_window_actor_queue_create_pixmap (self);
priv->needs_pixmap = TRUE;
meta_window_actor_set_updates_frozen (self,
meta_window_updates_are_frozen (priv->window));

View File

@@ -546,6 +546,26 @@ compare_rect_areas (gconstpointer a, gconstpointer b)
return b_area - a_area; /* positive ret value denotes b > a, ... */
}
/* ... and another helper for get_minimal_spanning_set_for_region()... */
static gboolean
check_strut_align (MetaStrut *strut, const MetaRectangle *rect)
{
/* Check whether @strut actually aligns to the side of @rect it claims */
switch (strut->side)
{
case META_SIDE_TOP:
return BOX_TOP (strut->rect) <= BOX_TOP (*rect);
case META_SIDE_BOTTOM:
return BOX_BOTTOM (strut->rect) >= BOX_BOTTOM (*rect);
case META_SIDE_LEFT:
return BOX_LEFT (strut->rect) <= BOX_LEFT (*rect);
case META_SIDE_RIGHT:
return BOX_RIGHT (strut->rect) >= BOX_RIGHT (*rect);
default:
return FALSE;
}
}
/**
* meta_rectangle_get_minimal_spanning_set_for_region:
* @basic_rect: Input rectangle
@@ -629,8 +649,9 @@ meta_rectangle_get_minimal_spanning_set_for_region (
for (strut_iter = all_struts; strut_iter; strut_iter = strut_iter->next)
{
GList *rect_iter;
MetaRectangle *strut_rect = &((MetaStrut*)strut_iter->data)->rect;
GList *rect_iter;
MetaStrut *strut = (MetaStrut*)strut_iter->data;
MetaRectangle *strut_rect = &strut->rect;
tmp_list = ret;
ret = NULL;
@@ -638,7 +659,9 @@ meta_rectangle_get_minimal_spanning_set_for_region (
while (rect_iter)
{
MetaRectangle *rect = (MetaRectangle*) rect_iter->data;
if (!meta_rectangle_overlap (rect, strut_rect))
if (!meta_rectangle_overlap (strut_rect, rect) ||
!check_strut_align (strut, basic_rect))
ret = g_list_prepend (ret, rect);
else
{

View File

@@ -426,7 +426,7 @@ setup_constraint_info (ConstraintInfo *info,
*/
if (meta_prefs_get_force_fullscreen() &&
!window->hide_titlebar_when_maximized &&
window->decorated &&
(window->decorated || !meta_window_is_client_decorated (window)) &&
meta_rectangle_equal (new, &monitor_info->rect) &&
window->has_fullscreen_func &&
!window->fullscreen)

View File

@@ -322,8 +322,7 @@ meta_core_maximize (Display *xdisplay,
if (meta_prefs_get_raise_on_click ())
meta_window_raise (window);
meta_window_maximize (window,
META_MAXIMIZE_HORIZONTAL | META_MAXIMIZE_VERTICAL);
meta_window_maximize (window, META_MAXIMIZE_BOTH);
}
void
@@ -336,11 +335,9 @@ meta_core_toggle_maximize_vertically (Display *xdisplay,
meta_window_raise (window);
if (META_WINDOW_MAXIMIZED_VERTICALLY (window))
meta_window_unmaximize (window,
META_MAXIMIZE_VERTICAL);
meta_window_unmaximize (window, META_MAXIMIZE_VERTICAL);
else
meta_window_maximize (window,
META_MAXIMIZE_VERTICAL);
meta_window_maximize (window, META_MAXIMIZE_VERTICAL);
}
void
@@ -353,11 +350,9 @@ meta_core_toggle_maximize_horizontally (Display *xdisplay,
meta_window_raise (window);
if (META_WINDOW_MAXIMIZED_HORIZONTALLY (window))
meta_window_unmaximize (window,
META_MAXIMIZE_HORIZONTAL);
meta_window_unmaximize (window, META_MAXIMIZE_HORIZONTAL);
else
meta_window_maximize (window,
META_MAXIMIZE_HORIZONTAL);
meta_window_maximize (window, META_MAXIMIZE_HORIZONTAL);
}
void
@@ -370,11 +365,9 @@ meta_core_toggle_maximize (Display *xdisplay,
meta_window_raise (window);
if (META_WINDOW_MAXIMIZED (window))
meta_window_unmaximize (window,
META_MAXIMIZE_HORIZONTAL | META_MAXIMIZE_VERTICAL);
meta_window_unmaximize (window, META_MAXIMIZE_BOTH);
else
meta_window_maximize (window,
META_MAXIMIZE_HORIZONTAL | META_MAXIMIZE_VERTICAL);
meta_window_maximize (window, META_MAXIMIZE_BOTH);
}
void
@@ -386,8 +379,7 @@ meta_core_unmaximize (Display *xdisplay,
if (meta_prefs_get_raise_on_click ())
meta_window_raise (window);
meta_window_unmaximize (window,
META_MAXIMIZE_HORIZONTAL | META_MAXIMIZE_VERTICAL);
meta_window_unmaximize (window, META_MAXIMIZE_BOTH);
}
void

View File

@@ -1815,6 +1815,9 @@ get_input_event (MetaDisplay *display,
switch (input_event->evtype)
{
case XI_TouchBegin:
case XI_TouchUpdate:
case XI_TouchEnd:
case XI_Motion:
case XI_ButtonPress:
case XI_ButtonRelease:
@@ -2293,6 +2296,7 @@ event_callback (XEvent *event,
{
XIDeviceEvent *device_event = (XIDeviceEvent *) input_event;
XIEnterEvent *enter_event = (XIEnterEvent *) input_event;
gint button = 0;
if (window && !window->override_redirect &&
((input_event->evtype == XI_KeyPress) || (input_event->evtype == XI_ButtonPress)))
@@ -2328,20 +2332,33 @@ event_callback (XEvent *event,
if (meta_display_process_key_event (display, window, (XIDeviceEvent *) input_event))
filter_out_event = bypass_compositor = TRUE;
break;
case XI_TouchBegin:
/* Filter out non-pointer-emulating touches */
if ((((XIDeviceEvent *) input_event)->flags & XITouchEmulatingPointer) == 0)
break;
/* Fall through */
case XI_ButtonPress:
if (display->grab_op == META_GRAB_OP_COMPOSITOR)
break;
display->overlay_key_only_pressed = FALSE;
if (device_event->detail == 4 || device_event->detail == 5)
/* Scrollwheel event, do nothing and deliver event to compositor below */
break;
if (input_event->evtype == XI_ButtonPress)
{
if (device_event->detail == 4 || device_event->detail == 5)
/* Scrollwheel event, do nothing and deliver event to compositor below */
break;
else
button = device_event->detail;
}
else if (input_event->evtype == XI_TouchBegin)
button = 1;
if ((window &&
meta_grab_op_is_mouse (display->grab_op) &&
(device_event->mods.effective & display->window_grab_modifiers) &&
display->grab_button != device_event->detail &&
display->grab_button != button &&
display->grab_window == window) ||
grab_op_is_keyboard (display->grab_op))
{
@@ -2371,8 +2388,7 @@ event_callback (XEvent *event,
*/
unmodified = (device_event->mods.effective & grab_mask) == 0;
if (unmodified ||
device_event->detail == 1)
if (unmodified || button == 1)
{
/* don't focus if frame received, will be lowered in
* frames.c or special-cased if the click was on a
@@ -2393,7 +2409,7 @@ event_callback (XEvent *event,
{
meta_topic (META_DEBUG_FOCUS,
"Focusing %s due to unmodified button %u press (display.c)\n",
window->desc, device_event->detail);
window->desc, button);
meta_window_focus (window, device_event->time);
}
else
@@ -2409,7 +2425,7 @@ event_callback (XEvent *event,
if (!unmodified)
begin_move = TRUE;
}
else if (!unmodified && device_event->detail == meta_prefs_get_mouse_button_resize())
else if (!unmodified && button == meta_prefs_get_mouse_button_resize())
{
if (window->has_resize_func)
{
@@ -2451,21 +2467,21 @@ event_callback (XEvent *event,
op,
TRUE,
FALSE,
device_event->detail,
button,
0,
device_event->time,
device_event->root_x,
device_event->root_y);
}
}
else if (device_event->detail == meta_prefs_get_mouse_button_menu())
else if (button == meta_prefs_get_mouse_button_menu())
{
if (meta_prefs_get_raise_on_click ())
meta_window_raise (window);
meta_window_show_menu (window,
device_event->root_x,
device_event->root_y,
device_event->detail,
button,
device_event->time);
}
@@ -2490,7 +2506,7 @@ event_callback (XEvent *event,
META_GRAB_OP_MOVING,
TRUE,
FALSE,
device_event->detail,
button,
0,
device_event->time,
device_event->root_x,
@@ -2640,6 +2656,18 @@ event_callback (XEvent *event,
filter_out_event = bypass_compositor = TRUE;
break;
#endif /* HAVE_XI23 */
case XI_TouchUpdate:
case XI_TouchEnd:
/* Filter out non-pointer-emulating touches */
if ((((XIDeviceEvent *) input_event)->flags & XITouchEmulatingPointer) == 0)
break;
/* Currently unhandled, if any grab_op is started through XI_TouchBegin,
* the XIGrabDevice() evmask drops touch events, so only emulated
* XI_Motions and XI_ButtonRelease will follow.
*/
g_assert_not_reached ();
break;
}
}
else
@@ -3115,6 +3143,9 @@ event_get_modified_window (MetaDisplay *display,
case XI_ButtonRelease:
case XI_KeyPress:
case XI_KeyRelease:
case XI_TouchBegin:
case XI_TouchUpdate:
case XI_TouchEnd:
return ((XIDeviceEvent *) input_event)->event;
case XI_FocusIn:
case XI_FocusOut:
@@ -3401,6 +3432,15 @@ meta_spew_xi2_event (MetaDisplay *display,
case XI_Leave:
name = "XI_Leave";
break;
case XI_TouchBegin:
name = "XI_TouchBegin";
break;
case XI_TouchUpdate:
name = "XI_TouchUpdate";
break;
case XI_TouchEnd:
name = "XI_TouchEnd";
break;
#ifdef HAVE_XI23
case XI_BarrierHit:
name = "XI_BarrierHit";
@@ -3458,6 +3498,18 @@ meta_spew_xi2_event (MetaDisplay *display,
enter_event->root_x,
enter_event->root_y);
break;
case XI_TouchBegin:
case XI_TouchUpdate:
case XI_TouchEnd:
extra = g_strdup_printf ("win: 0x%lx root: 0x%lx touch sequence: %d x: %g y: %g state: 0x%x flags: 0x%x",
device_event->event,
device_event->root,
device_event->detail,
device_event->root_x,
device_event->root_y,
device_event->mods.effective,
device_event->flags);
break;
}
*name_p = name;

View File

@@ -2015,9 +2015,7 @@ process_mouse_move_resize_grab (MetaDisplay *display,
* moveresize now to get the position back to the original.
*/
if (window->shaken_loose || window->tile_mode == META_TILE_MAXIMIZED)
meta_window_maximize (window,
META_MAXIMIZE_HORIZONTAL |
META_MAXIMIZE_VERTICAL);
meta_window_maximize (window, META_MAXIMIZE_BOTH);
else if (window->tile_mode != META_TILE_NONE)
meta_window_tile (window);
else
@@ -2079,9 +2077,7 @@ process_keyboard_move_grab (MetaDisplay *display,
* now to get the position back to the original.
*/
if (window->shaken_loose)
meta_window_maximize (window,
META_MAXIMIZE_HORIZONTAL |
META_MAXIMIZE_VERTICAL);
meta_window_maximize (window, META_MAXIMIZE_BOTH);
else
meta_window_move_resize (display->grab_window,
TRUE,
@@ -2526,7 +2522,19 @@ handle_switch_to_workspace (MetaDisplay *display,
gint which = binding->handler->data;
MetaWorkspace *workspace;
workspace = meta_screen_get_workspace_by_index (screen, which);
if (which < 0)
{
/* Negative workspace numbers are directions with respect to the
* current workspace.
*/
workspace = meta_workspace_get_neighbor (screen->active_workspace,
which);
}
else
{
workspace = meta_screen_get_workspace_by_index (screen, which);
}
if (workspace)
{
@@ -2945,11 +2953,9 @@ handle_toggle_tiled (MetaDisplay *display,
: META_TILE_NONE;
if (window->saved_maximize)
meta_window_maximize (window, META_MAXIMIZE_VERTICAL |
META_MAXIMIZE_HORIZONTAL);
meta_window_maximize (window, META_MAXIMIZE_BOTH);
else
meta_window_unmaximize (window, META_MAXIMIZE_VERTICAL |
META_MAXIMIZE_HORIZONTAL);
meta_window_unmaximize (window, META_MAXIMIZE_BOTH);
}
else if (meta_window_can_tile_side_by_side (window))
{
@@ -2975,13 +2981,9 @@ handle_toggle_maximized (MetaDisplay *display,
gpointer dummy)
{
if (META_WINDOW_MAXIMIZED (window))
meta_window_unmaximize (window,
META_MAXIMIZE_HORIZONTAL |
META_MAXIMIZE_VERTICAL);
meta_window_unmaximize (window, META_MAXIMIZE_BOTH);
else if (window->has_maximize_func)
meta_window_maximize (window,
META_MAXIMIZE_HORIZONTAL |
META_MAXIMIZE_VERTICAL);
meta_window_maximize (window, META_MAXIMIZE_BOTH);
}
static void
@@ -2993,9 +2995,7 @@ handle_maximize (MetaDisplay *display,
gpointer dummy)
{
if (window->has_maximize_func)
meta_window_maximize (window,
META_MAXIMIZE_HORIZONTAL |
META_MAXIMIZE_VERTICAL);
meta_window_maximize (window, META_MAXIMIZE_BOTH);
}
static void
@@ -3007,9 +3007,7 @@ handle_unmaximize (MetaDisplay *display,
gpointer dummy)
{
if (window->maximized_vertically || window->maximized_horizontally)
meta_window_unmaximize (window,
META_MAXIMIZE_HORIZONTAL |
META_MAXIMIZE_VERTICAL);
meta_window_unmaximize (window, META_MAXIMIZE_BOTH);
}
static void
@@ -3373,28 +3371,28 @@ init_builtin_key_bindings (MetaDisplay *display)
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_LEFT,
NULL, 0);
handle_switch_to_workspace, META_MOTION_LEFT);
add_builtin_keybinding (display,
"switch-to-workspace-right",
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_RIGHT,
NULL, 0);
handle_switch_to_workspace, META_MOTION_RIGHT);
add_builtin_keybinding (display,
"switch-to-workspace-up",
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_UP,
NULL, 0);
handle_switch_to_workspace, META_MOTION_UP);
add_builtin_keybinding (display,
"switch-to-workspace-down",
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_DOWN,
NULL, 0);
handle_switch_to_workspace, META_MOTION_DOWN);
/* The ones which have inverses. These can't be bound to any keystroke

View File

@@ -34,6 +34,7 @@
#include <clutter/clutter.h>
#include <gdk/gdk.h>
#include <gdk/gdkx.h>
#include <X11/cursorfont.h>
#include <X11/extensions/Xfixes.h>
@@ -386,7 +387,7 @@ meta_cursor_tracker_get_pointer (MetaCursorTracker *tracker,
GdkScreen *gscreen;
gmanager = gdk_display_get_device_manager (gdk_display_get_default ());
gdevice = gdk_device_manager_get_client_pointer (gmanager);
gdevice = gdk_x11_device_manager_lookup (gmanager, META_VIRTUAL_CORE_POINTER_ID);
gdk_device_get_position (gdevice, &gscreen, x, y);
gdk_device_get_state (gdevice,

View File

@@ -778,6 +778,9 @@ create_monitor_skeleton (GDBusObjectManagerServer *manager,
meta_dbus_object_skeleton_set_idle_monitor (object, skeleton);
g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
g_object_unref (skeleton);
g_object_unref (object);
}
static void

View File

@@ -77,6 +77,7 @@ struct _MetaMonitorConfig {
GHashTable *configs;
MetaConfiguration *current;
gboolean current_is_stored;
gboolean current_is_for_laptop_lid;
MetaConfiguration *previous;
GFile *file;
@@ -876,7 +877,8 @@ apply_configuration (MetaMonitorConfig *self,
/* Stored (persistent) configurations override the previous one always.
Also, we clear the previous configuration if the current one (which is
about to become previous) is stored.
about to become previous) is stored, or if the current one has
different outputs.
*/
if (stored ||
(self->current && self->current_is_stored))
@@ -887,11 +889,27 @@ apply_configuration (MetaMonitorConfig *self,
}
else
{
self->previous = self->current;
/* Despite the name, config_equal() only checks the set of outputs,
not their modes
*/
if (self->current && config_equal (self->current, config))
{
self->previous = self->current;
}
else
{
if (self->current)
config_free (self->current);
self->previous = NULL;
}
}
self->current = config;
self->current_is_stored = stored;
/* If true, we'll be overridden at the end of this call
inside turn_off_laptop_display()
*/
self->current_is_for_laptop_lid = FALSE;
if (self->current == self->previous)
self->previous = NULL;
@@ -1008,8 +1026,16 @@ meta_monitor_config_apply_stored (MetaMonitorConfig *self,
if (self->lid_is_closed &&
stored->n_outputs > 1 &&
laptop_display_is_on (stored))
return apply_configuration (self, make_laptop_lid_config (stored),
manager, FALSE);
{
if (apply_configuration (self, make_laptop_lid_config (stored),
manager, FALSE))
{
self->current_is_for_laptop_lid = TRUE;
return TRUE;
}
else
return FALSE;
}
else
return apply_configuration (self, stored, manager, TRUE);
}
@@ -1356,6 +1382,7 @@ turn_off_laptop_display (MetaMonitorConfig *self,
new = make_laptop_lid_config (self->current);
apply_configuration (self, new, manager, FALSE);
self->current_is_for_laptop_lid = TRUE;
}
static void
@@ -1375,7 +1402,7 @@ power_client_changed_cb (UpClient *client,
if (is_closed)
turn_off_laptop_display (self, manager);
else
else if (self->current_is_for_laptop_lid)
meta_monitor_config_restore_previous (self, manager);
}
}

View File

@@ -75,6 +75,7 @@ main (int argc, char **argv)
g_printerr ("mutter: %s\n", error->message);
exit (1);
}
g_option_context_free (ctx);
if (plugin)
meta_plugin_manager_load (plugin);

View File

@@ -607,9 +607,6 @@ void meta_window_show_menu (MetaWindow *window,
int button,
guint32 timestamp);
gboolean meta_window_titlebar_is_onscreen (MetaWindow *window);
void meta_window_shove_titlebar_onscreen (MetaWindow *window);
void meta_window_set_gravity (MetaWindow *window,
int gravity);
@@ -694,4 +691,6 @@ Window meta_window_get_toplevel_xwindow (MetaWindow *window);
void meta_window_get_client_area_rect (const MetaWindow *window,
cairo_rectangle_int_t *rect);
gboolean meta_window_is_client_decorated (MetaWindow *window);
#endif

View File

@@ -1714,12 +1714,12 @@ reload_window_opacity (MetaWindow *window,
gboolean initial)
{
int requested_value = 0xFF;
guint8 opacity = 0xFF;
if (value->type != META_PROP_VALUE_INVALID)
requested_value = (int) value->v.cardinal;
opacity = (guint8)((gfloat)value->v.cardinal * 255.0 / ((gfloat)0xffffffff));
meta_window_set_opacity (window, requested_value);
meta_window_set_opacity (window, opacity);
}
#define RELOAD_STRING(var_name, propname) \

View File

@@ -823,6 +823,8 @@ sync_client_window_mapped (MetaWindow *window)
{
gboolean should_be_mapped = client_window_should_be_mapped (window);
g_return_if_fail (!window->override_redirect);
if (window->mapped == should_be_mapped)
return;
@@ -1487,7 +1489,8 @@ meta_window_new (MetaDisplay *display,
/* disable show desktop mode unless we're a desktop component */
maybe_leave_show_desktop_mode (window);
sync_client_window_mapped (window);
if (!window->override_redirect)
sync_client_window_mapped (window);
meta_window_queue (window, META_QUEUE_CALC_SHOWING);
/* See bug 303284; a transient of the given window can already exist, in which
@@ -1562,9 +1565,7 @@ meta_window_apply_session_info (MetaWindow *window,
if (window->has_maximize_func && info->maximized)
{
meta_window_maximize (window,
META_MAXIMIZE_HORIZONTAL |
META_MAXIMIZE_VERTICAL);
meta_window_maximize (window, META_MAXIMIZE_BOTH);
if (info->saved_rect_set)
{
@@ -2293,7 +2294,8 @@ implement_showing (MetaWindow *window,
meta_verbose ("Implement showing = %d for window %s\n",
showing, window->desc);
sync_client_window_mapped (window);
if (!window->override_redirect)
sync_client_window_mapped (window);
if (!showing)
{
@@ -3676,7 +3678,7 @@ meta_window_tile (MetaWindow *window)
return;
if (window->tile_mode == META_TILE_MAXIMIZED)
directions = META_MAXIMIZE_VERTICAL | META_MAXIMIZE_HORIZONTAL;
directions = META_MAXIMIZE_BOTH;
else
directions = META_MAXIMIZE_VERTICAL;
@@ -5399,6 +5401,9 @@ meta_window_move_to_monitor (MetaWindow *window,
window->tile_monitor_number = monitor;
meta_window_move_between_rects (window, &old_area, &new_area);
if (window->fullscreen || window->override_redirect)
meta_screen_queue_check_fullscreen (window->screen);
}
void
@@ -8712,15 +8717,11 @@ menu_callback (MetaWindowMenu *menu,
break;
case META_MENU_OP_UNMAXIMIZE:
meta_window_unmaximize (window,
META_MAXIMIZE_HORIZONTAL |
META_MAXIMIZE_VERTICAL);
meta_window_unmaximize (window, META_MAXIMIZE_BOTH);
break;
case META_MENU_OP_MAXIMIZE:
meta_window_maximize (window,
META_MAXIMIZE_HORIZONTAL |
META_MAXIMIZE_VERTICAL);
meta_window_maximize (window, META_MAXIMIZE_BOTH);
break;
case META_MENU_OP_UNSHADE:
@@ -9005,7 +9006,7 @@ meta_window_titlebar_is_onscreen (MetaWindow *window)
/* Titlebar can't be offscreen if there is no titlebar... */
if (!window->frame)
return FALSE;
return TRUE;
/* Get the rectangle corresponding to the titlebar */
meta_window_get_frame_rect (window, &titlebar_rect);
@@ -9237,10 +9238,7 @@ update_move (MetaWindow *window,
display->grab_anchor_root_x = x;
display->grab_anchor_root_y = y;
meta_window_unmaximize (window,
META_MAXIMIZE_HORIZONTAL |
META_MAXIMIZE_VERTICAL);
meta_window_unmaximize (window, META_MAXIMIZE_BOTH);
return;
}
@@ -9284,9 +9282,7 @@ update_move (MetaWindow *window,
window->user_rect.x = window->saved_rect.x;
window->user_rect.y = window->saved_rect.y;
meta_window_unmaximize (window,
META_MAXIMIZE_HORIZONTAL |
META_MAXIMIZE_VERTICAL);
meta_window_unmaximize (window, META_MAXIMIZE_BOTH);
}
display->grab_initial_window_pos = work_area;
@@ -9294,10 +9290,7 @@ update_move (MetaWindow *window,
display->grab_anchor_root_y = y;
window->shaken_loose = FALSE;
meta_window_maximize (window,
META_MAXIMIZE_HORIZONTAL |
META_MAXIMIZE_VERTICAL);
meta_window_maximize (window, META_MAXIMIZE_BOTH);
return;
}
}
@@ -10127,6 +10120,24 @@ meta_window_same_client (MetaWindow *window,
(other_window->xwindow & ~resource_mask));
}
/**
* meta_window_is_client_decorated:
*
* Check if if the window has decorations drawn by the client.
* (window->decorated refers only to whether we should add decorations)
*/
gboolean
meta_window_is_client_decorated (MetaWindow *window)
{
/* Currently the implementation here is hackish -
* has_custom_frame_extents() is set if _GTK_FRAME_EXTENTS is set
* to any value even 0. GTK+ always sets _GTK_FRAME_EXTENTS for
* client-side-decorated window, even if the value is 0 because
* the window is maxized and has no invisible borders or shadows.
*/
return window->has_custom_frame_extents;
}
void
meta_window_refresh_resize_popup (MetaWindow *window)
{
@@ -11399,12 +11410,6 @@ meta_window_compute_tile_match (MetaWindow *window)
}
}
gboolean
meta_window_can_close (MetaWindow *window)
{
return window->has_close_func;
}
Window
meta_window_get_toplevel_xwindow (MetaWindow *window)
{
@@ -11420,3 +11425,51 @@ meta_window_set_opacity (MetaWindow *window,
if (window->display->compositor)
meta_compositor_window_opacity_changed (window->display->compositor, window);
}
gboolean
meta_window_can_maximize (MetaWindow *window)
{
return window->has_maximize_func;
}
gboolean
meta_window_can_minimize (MetaWindow *window)
{
return window->has_minimize_func;
}
gboolean
meta_window_can_shade (MetaWindow *window)
{
return window->has_shade_func;
}
gboolean
meta_window_can_close (MetaWindow *window)
{
return window->has_close_func;
}
gboolean
meta_window_is_always_on_all_workspaces (MetaWindow *window)
{
return window->always_sticky;
}
gboolean
meta_window_is_above (MetaWindow *window)
{
return window->wm_state_above;
}
gboolean
meta_window_allows_move (MetaWindow *window)
{
return META_WINDOW_ALLOWS_MOVE (window);
}
gboolean
meta_window_allows_resize (MetaWindow *window)
{
return META_WINDOW_ALLOWS_RESIZE (window);
}

View File

@@ -72,11 +72,13 @@ typedef enum
* MetaMaximizeFlags:
* @META_MAXIMIZE_HORIZONTAL: Horizontal
* @META_MAXIMIZE_VERTICAL: Vertical
* @META_MAXIMIZE_BOTH: Both
*/
typedef enum
{
META_MAXIMIZE_HORIZONTAL = 1 << 0,
META_MAXIMIZE_VERTICAL = 1 << 1
META_MAXIMIZE_VERTICAL = 1 << 1,
META_MAXIMIZE_BOTH = (1 << 0 | 1 << 1),
} MetaMaximizeFlags;
#define META_TYPE_WINDOW (meta_window_get_type ())
@@ -242,6 +244,16 @@ void meta_window_begin_grab_op (MetaWindow *window,
gboolean frame_action,
guint32 timestamp);
gboolean meta_window_can_maximize (MetaWindow *window);
gboolean meta_window_can_minimize (MetaWindow *window);
gboolean meta_window_can_shade (MetaWindow *window);
gboolean meta_window_can_close (MetaWindow *window);
gboolean meta_window_is_always_on_all_workspaces (MetaWindow *window);
gboolean meta_window_is_above (MetaWindow *window);
gboolean meta_window_allows_move (MetaWindow *window);
gboolean meta_window_allows_resize (MetaWindow *window);
gboolean meta_window_titlebar_is_onscreen (MetaWindow *window);
void meta_window_shove_titlebar_onscreen (MetaWindow *window);
#endif

View File

@@ -123,6 +123,7 @@ maybe_redirect_mouse_event (XEvent *xevent)
switch (xev->evtype)
{
case XI_TouchBegin:
case XI_ButtonPress:
case XI_ButtonRelease:
case XI_Motion:
@@ -159,20 +160,27 @@ maybe_redirect_mouse_event (XEvent *xevent)
switch (xev->evtype)
{
case XI_TouchBegin:
case XI_ButtonPress:
case XI_ButtonRelease:
if (xev_d->evtype == XI_ButtonPress)
if (xev_d->evtype == XI_ButtonPress || xev_d->evtype == XI_TouchBegin)
{
GtkSettings *settings = gtk_settings_get_default ();
int double_click_time;
int double_click_distance;
int button;
g_object_get (settings,
"gtk-double-click-time", &double_click_time,
"gtk-double-click-distance", &double_click_distance,
NULL);
if (xev_d->detail == ui->button_click_number &&
if (xev->evtype == XI_TouchBegin)
button = 1;
else
button = xev_d->detail;
if (button == ui->button_click_number &&
xev_d->event == ui->button_click_window &&
xev_d->time < ui->button_click_time + double_click_time &&
ABS (xev_d->event_x - ui->button_click_x) <= double_click_distance &&
@@ -185,20 +193,22 @@ maybe_redirect_mouse_event (XEvent *xevent)
else
{
gevent = gdk_event_new (GDK_BUTTON_PRESS);
ui->button_click_number = xev_d->detail;
ui->button_click_number = button;
ui->button_click_window = xev_d->event;
ui->button_click_time = xev_d->time;
ui->button_click_x = xev_d->event_x;
ui->button_click_y = xev_d->event_y;
}
gevent->button.button = button;
}
else
{
gevent = gdk_event_new (GDK_BUTTON_RELEASE);
gevent->button.button = xev_d->detail;
}
gevent->button.window = g_object_ref (gdk_window);
gevent->button.button = xev_d->detail;
gevent->button.time = xev_d->time;
gevent->button.x = xev_d->event_x;
gevent->button.y = xev_d->event_y;