Compare commits
41 Commits
wip/garnac
...
3.21.91
Author | SHA1 | Date | |
---|---|---|---|
![]() |
335764e815 | ||
![]() |
89f6fdce5d | ||
![]() |
7d9af9585d | ||
![]() |
c8f24721c5 | ||
![]() |
7ba803934c | ||
![]() |
5a1ce1b5a2 | ||
![]() |
1f570d542e | ||
![]() |
658d97d00e | ||
![]() |
8942e98e1d | ||
![]() |
b6e13c459a | ||
![]() |
43151edece | ||
![]() |
b3f27de710 | ||
![]() |
4cf14c41ef | ||
![]() |
dc03b3aa47 | ||
![]() |
ef3e036b45 | ||
![]() |
24c3844246 | ||
![]() |
f21df37190 | ||
![]() |
a5efa30f6c | ||
![]() |
817911d9d3 | ||
![]() |
a8d86b4876 | ||
![]() |
cfb3d10e1b | ||
![]() |
3a75e55cd8 | ||
![]() |
335cd8e74c | ||
![]() |
c73d3d9d83 | ||
![]() |
8833991201 | ||
![]() |
9fb891d216 | ||
![]() |
3b3f40a1aa | ||
![]() |
2114f2eb9f | ||
![]() |
3ee16a2abb | ||
![]() |
9fb4783957 | ||
![]() |
9e641f623f | ||
![]() |
8065ff5a37 | ||
![]() |
6ce918661c | ||
![]() |
a72bd1bd29 | ||
![]() |
89854f9244 | ||
![]() |
a6e15e841b | ||
![]() |
61e9c5c357 | ||
![]() |
54dc10f890 | ||
![]() |
7baa1d8a8d | ||
![]() |
4b4eb3a039 | ||
![]() |
92c03e8625 |
19
NEWS
19
NEWS
@@ -1,3 +1,22 @@
|
||||
3.21.91
|
||||
=======
|
||||
* Add support for xdg-foreign protocol [Jonas; #769786]
|
||||
* Support monitor rotation on wayland [Carlos; #745079]
|
||||
* Port xdg-shell implementation to unstable v6 [Jonas; #769936]
|
||||
* Handle unsupported buffer sizes more gracefully [Olivier; #770387]
|
||||
* Use the same output naming logic as the X server on wayland [Rui; #770338]
|
||||
* Fix replies in gnome-shell's chat notifications on wayland [Florian; #758167]
|
||||
* Misc. bug fixes and cleanups [Bastien, Sjoerd, Jonas; #769276, #769636,
|
||||
#770131, #770324, #769731]
|
||||
|
||||
Contributors:
|
||||
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Rui Matos, Florian Müllner,
|
||||
Bastien Nocera, Sjoerd Simons
|
||||
|
||||
Translations:
|
||||
Piotr Drąg [pl], Mario Blättermann [de], Andika Triwidada [id],
|
||||
Enrico Nicoletto [pt_BR], Мирослав Николић [sr, sr@latin]
|
||||
|
||||
3.21.90
|
||||
=======
|
||||
* Consider XDG_SESSION_TYPE when determining session type [Jouke; #759388]
|
||||
|
@@ -676,12 +676,6 @@ clutter_stage_do_paint_view (ClutterStage *stage,
|
||||
_clutter_stage_paint_volume_stack_free_all (stage);
|
||||
_clutter_stage_update_active_framebuffer (stage, framebuffer);
|
||||
clutter_actor_paint (CLUTTER_ACTOR (stage));
|
||||
|
||||
if (clutter_stage_view_get_onscreen (view) !=
|
||||
clutter_stage_view_get_framebuffer (view))
|
||||
{
|
||||
clutter_stage_view_blit_offscreen (view, clip);
|
||||
}
|
||||
}
|
||||
|
||||
/* This provides a common point of entry for painting the scenegraph
|
||||
|
@@ -420,6 +420,12 @@ paint_stage (ClutterStageCogl *stage_cogl,
|
||||
|
||||
_clutter_stage_maybe_setup_viewport (stage, view);
|
||||
_clutter_stage_paint_view (stage, view, clip);
|
||||
|
||||
if (clutter_stage_view_get_onscreen (view) !=
|
||||
clutter_stage_view_get_framebuffer (view))
|
||||
{
|
||||
clutter_stage_view_blit_offscreen (view, clip);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -1028,6 +1028,13 @@ _cogl_egl_create_image (CoglContext *ctx,
|
||||
if (target == EGL_NATIVE_PIXMAP_KHR)
|
||||
egl_ctx = EGL_NO_CONTEXT;
|
||||
else
|
||||
#endif
|
||||
#if COGL_HAS_WAYLAND_EGL_SERVER_SUPPORT
|
||||
/* The WL_bind_wayland_display spec states that EGL_NO_CONTEXT is to be used
|
||||
* in conjunction with the EGL_WAYLAND_BUFFER_WL target */
|
||||
if (target == EGL_WAYLAND_BUFFER_WL)
|
||||
egl_ctx = EGL_NO_CONTEXT;
|
||||
else
|
||||
#endif
|
||||
egl_ctx = egl_display->egl_context;
|
||||
|
||||
|
@@ -2,7 +2,7 @@ AC_PREREQ(2.62)
|
||||
|
||||
m4_define([mutter_major_version], [3])
|
||||
m4_define([mutter_minor_version], [21])
|
||||
m4_define([mutter_micro_version], [90])
|
||||
m4_define([mutter_micro_version], [91])
|
||||
|
||||
m4_define([mutter_version],
|
||||
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
||||
@@ -272,7 +272,7 @@ AS_IF([test "$have_wayland" = "yes"], [
|
||||
AC_SUBST([WAYLAND_SCANNER])
|
||||
AC_DEFINE([HAVE_WAYLAND],[1],[Define if you want to enable Wayland support])
|
||||
|
||||
PKG_CHECK_MODULES(WAYLAND_PROTOCOLS, [wayland-protocols >= 1.6],
|
||||
PKG_CHECK_MODULES(WAYLAND_PROTOCOLS, [wayland-protocols >= 1.7],
|
||||
[ac_wayland_protocols_pkgdatadir=`$PKG_CONFIG --variable=pkgdatadir wayland-protocols`])
|
||||
AC_SUBST(WAYLAND_PROTOCOLS_DATADIR, $ac_wayland_protocols_pkgdatadir)
|
||||
])
|
||||
|
572
po/sr.po
572
po/sr.po
@@ -1,8 +1,7 @@
|
||||
# Serbian translation of mutter.
|
||||
# Courtesy of Prevod.org team (http://prevod.org/) -- 2003—2016.
|
||||
# This file is distributed under the same license as the mutter package.
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
# Горан Ракић <grakic@devbase.net>
|
||||
# Данило Шеган <danilo@prevod.org>, 2005.
|
||||
# Милош Поповић <gpopac@gmail.com>, 2010.
|
||||
@@ -12,10 +11,10 @@ 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: 2016-03-09 01:41+0000\n"
|
||||
"PO-Revision-Date: 2016-03-09 09:52+0200\n"
|
||||
"POT-Creation-Date: 2016-08-19 21:04+0000\n"
|
||||
"PO-Revision-Date: 2016-08-28 11:11+0200\n"
|
||||
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
|
||||
"Language-Team: Serbian <(nothing)>\n"
|
||||
"Language-Team: српски <gnome-sr@googlegroups.org>\n"
|
||||
"Language: sr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -24,255 +23,15 @@ msgstr ""
|
||||
"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Project-Style: gnome\n"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:1
|
||||
msgid "Navigation"
|
||||
msgstr "Навигација"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:2
|
||||
msgid "Move window to workspace 1"
|
||||
msgstr "Премешта прозор на радни простор број 1"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:3
|
||||
msgid "Move window to workspace 2"
|
||||
msgstr "Премешта прозор на радни простор број 2"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:4
|
||||
msgid "Move window to workspace 3"
|
||||
msgstr "Премешта прозор на радни простор број 3"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:5
|
||||
msgid "Move window to workspace 4"
|
||||
msgstr "Премешта прозор на радни простор број 4"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:6
|
||||
msgid "Move window to last workspace"
|
||||
msgstr "Премешта прозор на последњи радни простор"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:7
|
||||
msgid "Move window one workspace to the left"
|
||||
msgstr "Премешта прозор један радни простор на лево"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:8
|
||||
msgid "Move window one workspace to the right"
|
||||
msgstr "Премешта прозор један радни простор на десно"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:9
|
||||
msgid "Move window one workspace up"
|
||||
msgstr "Премешта прозор један радни простор на горе"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:10
|
||||
msgid "Move window one workspace down"
|
||||
msgstr "Премешта прозор један радни простор на доле"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:11
|
||||
msgid "Move window one monitor to the left"
|
||||
msgstr "Премешта прозор један монитор на лево"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:12
|
||||
msgid "Move window one monitor to the right"
|
||||
msgstr "Премешта прозор један монитор на десно"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:13
|
||||
msgid "Move window one monitor up"
|
||||
msgstr "Премешта прозор један монитор на горе"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:14
|
||||
msgid "Move window one monitor down"
|
||||
msgstr "Премешта прозор један монитор на доле"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:15
|
||||
msgid "Switch applications"
|
||||
msgstr "Пребацује програме"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:16
|
||||
msgid "Switch to previous application"
|
||||
msgstr "Пребацује на претходни програм"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:17
|
||||
msgid "Switch windows"
|
||||
msgstr "Пребацује прозоре"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:18
|
||||
msgid "Switch to previous window"
|
||||
msgstr "Пребацује на претходни прозор"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:19
|
||||
msgid "Switch windows of an application"
|
||||
msgstr "Пребацује прозоре програма"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:20
|
||||
msgid "Switch to previous window of an application"
|
||||
msgstr "Пребацује на претходни прозор програма"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:21
|
||||
msgid "Switch system controls"
|
||||
msgstr "Пребацује контроле система"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:22
|
||||
msgid "Switch to previous system control"
|
||||
msgstr "Пребацује на претходну контролу система"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:23
|
||||
msgid "Switch windows directly"
|
||||
msgstr "Пребацује прозоре директно"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:24
|
||||
msgid "Switch directly to previous window"
|
||||
msgstr "Пребацује непосредно на претходни прозор"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:25
|
||||
msgid "Switch windows of an app directly"
|
||||
msgstr "Пребацује прозоре програма директно"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:26
|
||||
msgid "Switch directly to previous window of an app"
|
||||
msgstr "Пребацује непосредно на претходни прозор програма"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:27
|
||||
msgid "Switch system controls directly"
|
||||
msgstr "Пребацује контроле система директно"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:28
|
||||
msgid "Switch directly to previous system control"
|
||||
msgstr "Пребацује непосредно на претходну контролу система"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:29
|
||||
msgid "Hide all normal windows"
|
||||
msgstr "Скрива све обичне прозоре"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:30
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "Пребацује се на радни простор 1"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:31
|
||||
msgid "Switch to workspace 2"
|
||||
msgstr "Пребацује се на радни простор 2"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:32
|
||||
msgid "Switch to workspace 3"
|
||||
msgstr "Пребацује се на радни простор 3"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:33
|
||||
msgid "Switch to workspace 4"
|
||||
msgstr "Пребацује се на радни простор 4"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:34
|
||||
msgid "Switch to last workspace"
|
||||
msgstr "Пребацује се на последњи радни простор"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:35
|
||||
msgid "Move to workspace left"
|
||||
msgstr "Премешта на радни простор лево"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:36
|
||||
msgid "Move to workspace right"
|
||||
msgstr "Премешта на радни простор десно"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:37
|
||||
msgid "Move to workspace above"
|
||||
msgstr "Премешта на радни простор изнад"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:38
|
||||
msgid "Move to workspace below"
|
||||
msgstr "Премешта на радни простор испод"
|
||||
|
||||
#: ../data/50-mutter-system.xml.in.h:1
|
||||
msgid "System"
|
||||
msgstr "Систем"
|
||||
|
||||
#: ../data/50-mutter-system.xml.in.h:2
|
||||
msgid "Show the run command prompt"
|
||||
msgstr "Приказује промпт за покретање наредбе"
|
||||
|
||||
#: ../data/50-mutter-system.xml.in.h:3
|
||||
msgid "Show the activities overview"
|
||||
msgstr "Приказује преглед активности"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:1
|
||||
msgid "Windows"
|
||||
msgstr "Прозори"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:2
|
||||
msgid "Activate the window menu"
|
||||
msgstr "Активира мени прозора"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:3
|
||||
msgid "Toggle fullscreen mode"
|
||||
msgstr "Искључује/укључује приказ преко целог екрана"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:4
|
||||
msgid "Toggle maximization state"
|
||||
msgstr "Искључује/укључује стање увећања"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:5
|
||||
msgid "Maximize window"
|
||||
msgstr "Увећава прозор"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:6
|
||||
msgid "Restore window"
|
||||
msgstr "Враћа величину прозора"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:7
|
||||
msgid "Toggle shaded state"
|
||||
msgstr "Искључује/укључује стање засенчености"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:8
|
||||
msgid "Close window"
|
||||
msgstr "Затвара прозор"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:9
|
||||
msgid "Hide window"
|
||||
msgstr "Скрива прозор"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:10
|
||||
msgid "Move window"
|
||||
msgstr "Премешта прозор"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:11
|
||||
msgid "Resize window"
|
||||
msgstr "Мења величину прозора"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:12
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr "Приказује прозор на свим радним просторима или само на једном"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:13
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
msgstr "Издиже прозор уколико га други прозор заклања, у противном га спушта"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:14
|
||||
msgid "Raise window above other windows"
|
||||
msgstr "Издиже прозор изнад осталих прозора"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:15
|
||||
msgid "Lower window below other windows"
|
||||
msgstr "Спушта прозор испод осталих прозора"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:16
|
||||
msgid "Maximize window vertically"
|
||||
msgstr "Увећава прозор вертикално"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:17
|
||||
msgid "Maximize window horizontally"
|
||||
msgstr "Увећава прозор хоризонтално"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:18
|
||||
msgid "View split on left"
|
||||
msgstr "Прикажите поделу на лево"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:19
|
||||
msgid "View split on right"
|
||||
msgstr "Прикажите поделу на десно"
|
||||
|
||||
#: ../data/mutter.desktop.in.h:1
|
||||
#: data/mutter.desktop.in:4
|
||||
msgid "Mutter"
|
||||
msgstr "Матер"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:1
|
||||
#: data/org.gnome.mutter.gschema.xml.in:7
|
||||
msgid "Modifier to use for extended window management operations"
|
||||
msgstr "Тастер који се користи за проширене радње управника прозорима"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:2
|
||||
#: data/org.gnome.mutter.gschema.xml.in:8
|
||||
msgid ""
|
||||
"This key will initiate the \"overlay\", which is a combination window "
|
||||
"overview and application launching system. The default is intended to be the "
|
||||
@@ -284,11 +43,11 @@ msgstr ""
|
||||
"за компоненте рачунара. Очекује се да ово везује или подразумевани или низ "
|
||||
"празних знакова."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:3
|
||||
#: data/org.gnome.mutter.gschema.xml.in:20
|
||||
msgid "Attach modal dialogs"
|
||||
msgstr "Прилагање модалних прозорчића"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:4
|
||||
#: data/org.gnome.mutter.gschema.xml.in:21
|
||||
msgid ""
|
||||
"When true, instead of having independent titlebars, modal dialogs appear "
|
||||
"attached to the titlebar of the parent window and are moved together with "
|
||||
@@ -298,12 +57,12 @@ msgstr ""
|
||||
"појављују приложени на траку алата матичног прозора и бивају премештани "
|
||||
"заједно са матичним прозором."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:5
|
||||
#: data/org.gnome.mutter.gschema.xml.in:30
|
||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
msgstr ""
|
||||
"Укључује поплочавање ивице приликом отпуштања прозора на ивицама екрана"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:6
|
||||
#: data/org.gnome.mutter.gschema.xml.in:31
|
||||
msgid ""
|
||||
"If enabled, dropping windows on vertical screen edges maximizes them "
|
||||
"vertically and resizes them horizontally to cover half of the available "
|
||||
@@ -313,11 +72,11 @@ msgstr ""
|
||||
"усправно и мења им величину водоравно да прекрију половину доступне области. "
|
||||
"Отпуштање прозора на горњој ивици екрана увећава их у потпуности."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:7
|
||||
#: data/org.gnome.mutter.gschema.xml.in:40
|
||||
msgid "Workspaces are managed dynamically"
|
||||
msgstr "Радним просторима се управља динамички"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:8
|
||||
#: data/org.gnome.mutter.gschema.xml.in:41
|
||||
msgid ""
|
||||
"Determines whether workspaces are managed dynamically or whether there's a "
|
||||
"static number of workspaces (determined by the num-workspaces key in org."
|
||||
@@ -327,11 +86,11 @@ msgstr ""
|
||||
"стални број радних простора (одређен бројем радних простора у „org.gnome."
|
||||
"desktop.wm.preferences“)."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:9
|
||||
#: data/org.gnome.mutter.gschema.xml.in:50
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr "Радни простори само на примарне"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:10
|
||||
#: data/org.gnome.mutter.gschema.xml.in:51
|
||||
msgid ""
|
||||
"Determines whether workspace switching should happen for windows on all "
|
||||
"monitors or only for windows on the primary monitor."
|
||||
@@ -339,11 +98,11 @@ msgstr ""
|
||||
"Одређује да ли пребацивање радног простора треба да се деси за прозоре на "
|
||||
"свим мониторима или само за прозоре на главном монитору."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:11
|
||||
#: data/org.gnome.mutter.gschema.xml.in:59
|
||||
msgid "No tab popup"
|
||||
msgstr "Без искакања језичка"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:12
|
||||
#: data/org.gnome.mutter.gschema.xml.in:60
|
||||
msgid ""
|
||||
"Determines whether the use of popup and highlight frame should be disabled "
|
||||
"for window cycling."
|
||||
@@ -351,11 +110,11 @@ msgstr ""
|
||||
"Одређује да ли ће употреба оквира искакања и истицања бити приказана за "
|
||||
"кретање по прозорима."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:13
|
||||
#: data/org.gnome.mutter.gschema.xml.in:68
|
||||
msgid "Delay focus changes until the pointer stops moving"
|
||||
msgstr "Застој првог плана се мења док се показивач не заустави"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:14
|
||||
#: data/org.gnome.mutter.gschema.xml.in:69
|
||||
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 "
|
||||
@@ -365,11 +124,11 @@ msgstr ""
|
||||
"план неће бити мењан одмах по уласку у прозор, већ само након што показивач "
|
||||
"престане да се помера."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:15
|
||||
#: data/org.gnome.mutter.gschema.xml.in:79
|
||||
msgid "Draggable border width"
|
||||
msgstr "Ширина ивице за превлачење"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:16
|
||||
#: data/org.gnome.mutter.gschema.xml.in:80
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
@@ -377,11 +136,11 @@ msgstr ""
|
||||
"Износ укупне ивице за превлачење. Ако видљиве ивице теме нису довољне, биће "
|
||||
"додате невидљиве ивице за достизање ове вредности."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:17
|
||||
#: data/org.gnome.mutter.gschema.xml.in:89
|
||||
msgid "Auto maximize nearly monitor sized windows"
|
||||
msgstr "Сам увећава повећане прозоре најближег монитора"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:18
|
||||
#: data/org.gnome.mutter.gschema.xml.in:90
|
||||
msgid ""
|
||||
"If enabled, new windows that are initially the size of the monitor "
|
||||
"automatically get maximized."
|
||||
@@ -389,11 +148,11 @@ msgstr ""
|
||||
"Ако је укључено, нови прозори који су почетно величине монитора самостално "
|
||||
"бивају увећани."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:19
|
||||
#: data/org.gnome.mutter.gschema.xml.in:98
|
||||
msgid "Place new windows in the center"
|
||||
msgstr "Нови прозор у средиште"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:20
|
||||
#: data/org.gnome.mutter.gschema.xml.in:99
|
||||
msgid ""
|
||||
"When true, the new windows will always be put in the center of the active "
|
||||
"screen of the monitor."
|
||||
@@ -401,85 +160,94 @@ msgstr ""
|
||||
"Ако је изабрано, нови прозори ће увек бити постављени на средину радног "
|
||||
"екрана монитора."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:21
|
||||
#: data/org.gnome.mutter.gschema.xml.in:120
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Бира прозор из језичка искакања"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:22
|
||||
#: data/org.gnome.mutter.gschema.xml.in:125
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Отказивање језичка искакања"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:6
|
||||
msgid "Switch to VT 1"
|
||||
msgstr "Прелазак на ВТ 1"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:10
|
||||
msgid "Switch to VT 2"
|
||||
msgstr "Прелазак на ВТ 2"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:14
|
||||
msgid "Switch to VT 3"
|
||||
msgstr "Прелазак на ВТ 3"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:18
|
||||
msgid "Switch to VT 4"
|
||||
msgstr "Прелазак на ВТ 4"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:22
|
||||
msgid "Switch to VT 5"
|
||||
msgstr "Прелазак на ВТ 5"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:26
|
||||
msgid "Switch to VT 6"
|
||||
msgstr "Прелазак на ВТ 6"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:30
|
||||
msgid "Switch to VT 7"
|
||||
msgstr "Прелазак на ВТ 7"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:34
|
||||
msgid "Switch to VT 8"
|
||||
msgstr "Прелазак на ВТ 8"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:38
|
||||
msgid "Switch to VT 9"
|
||||
msgstr "Прелазак на ВТ 9"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:42
|
||||
msgid "Switch to VT 10"
|
||||
msgstr "Прелазак на ВТ 10"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:46
|
||||
msgid "Switch to VT 11"
|
||||
msgstr "Прелазак на ВТ 11"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:50
|
||||
msgid "Switch to VT 12"
|
||||
msgstr "Прелазак на ВТ 12"
|
||||
|
||||
#: ../src/backends/meta-monitor-manager.c:518
|
||||
#: src/backends/meta-input-settings.c:1707
|
||||
#| msgid "Switch system controls"
|
||||
msgid "Switch monitor"
|
||||
msgstr "Промени монитор"
|
||||
|
||||
#: src/backends/meta-input-settings.c:1709
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Прикажи помоћ на екрану"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:514
|
||||
msgid "Built-in display"
|
||||
msgstr "Уграђени дисплеј"
|
||||
|
||||
#: ../src/backends/meta-monitor-manager.c:544
|
||||
#: src/backends/meta-monitor-manager.c:537
|
||||
msgid "Unknown"
|
||||
msgstr "Непознато"
|
||||
|
||||
#: ../src/backends/meta-monitor-manager.c:546
|
||||
#: src/backends/meta-monitor-manager.c:539
|
||||
msgid "Unknown Display"
|
||||
msgstr "Непознат дисплеј"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: ../src/backends/meta-monitor-manager.c:554
|
||||
#: src/backends/meta-monitor-manager.c:547
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#. 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:456
|
||||
#: src/compositor/compositor.c:463
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
@@ -487,20 +255,20 @@ msgid ""
|
||||
msgstr ""
|
||||
"Неки други композитни управник је већ покренут на приказу %i еркана „%s“."
|
||||
|
||||
#: ../src/core/bell.c:185
|
||||
#: src/core/bell.c:194
|
||||
msgid "Bell event"
|
||||
msgstr "Звонца"
|
||||
|
||||
#: ../src/core/delete.c:127
|
||||
#: src/core/delete.c:127
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "„%s“ не даје одзив."
|
||||
|
||||
#: ../src/core/delete.c:129
|
||||
#: src/core/delete.c:129
|
||||
msgid "Application is not responding."
|
||||
msgstr "Програм не даје одзив."
|
||||
|
||||
#: ../src/core/delete.c:134
|
||||
#: src/core/delete.c:134
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@@ -508,57 +276,56 @@ msgstr ""
|
||||
"Можете мало сачекати док се програм не сабере или приморати програм да "
|
||||
"комплетно прекине са радом."
|
||||
|
||||
#: ../src/core/delete.c:141
|
||||
#: src/core/delete.c:141
|
||||
msgid "_Wait"
|
||||
msgstr "_Сачекај"
|
||||
|
||||
#: ../src/core/delete.c:141
|
||||
#: src/core/delete.c:141
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Приморај излаз"
|
||||
|
||||
#: ../src/core/display.c:555
|
||||
#: src/core/display.c:590
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "Нисам успео да отворим екран „%s“ Икс система прозора\n"
|
||||
|
||||
#: ../src/core/main.c:181
|
||||
#: src/core/main.c:182
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Искључује везу са управником сесије"
|
||||
|
||||
#: ../src/core/main.c:187
|
||||
#: src/core/main.c:188
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Мења текућег управника прозорима"
|
||||
|
||||
#: ../src/core/main.c:193
|
||||
#: src/core/main.c:194
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Наводи ИБ управника сесије"
|
||||
|
||||
#: ../src/core/main.c:198
|
||||
#: src/core/main.c:199
|
||||
msgid "X Display to use"
|
||||
msgstr "Икс екран који ће бити коришћен"
|
||||
|
||||
#: ../src/core/main.c:204
|
||||
#: src/core/main.c:205
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Покреће сесију из датотеке чувања"
|
||||
|
||||
#: ../src/core/main.c:210
|
||||
#: src/core/main.c:211
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Чини Икс позиве усклађеним"
|
||||
|
||||
#: ../src/core/main.c:217
|
||||
#: src/core/main.c:218
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Ради као вајландов саставник"
|
||||
|
||||
#: ../src/core/main.c:223
|
||||
#| msgid "Run as a wayland compositor"
|
||||
#: src/core/main.c:224
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Ради као угнеждени саставник"
|
||||
|
||||
#: ../src/core/main.c:231
|
||||
#: src/core/main.c:232
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Ради као пуни сервер приказа, уместо као угнеждени"
|
||||
|
||||
#: ../src/core/mutter.c:39
|
||||
#: src/core/mutter.c:39
|
||||
#, c-format
|
||||
msgid ""
|
||||
"mutter %s\n"
|
||||
@@ -573,20 +340,20 @@ msgstr ""
|
||||
"НЕ постоји никаква гаранција; чак ни гаранција о ТРЖИШНОЈ ВРЕДНОСТИ или "
|
||||
"ПРИЛАГОЂЕНОСТИ ОДРЕЂЕНОЈ НАМЕНИ.\n"
|
||||
|
||||
#: ../src/core/mutter.c:53
|
||||
#: src/core/mutter.c:53
|
||||
msgid "Print version"
|
||||
msgstr "Исписује издање"
|
||||
|
||||
#: ../src/core/mutter.c:59
|
||||
#: src/core/mutter.c:59
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Прикључци Матера за коришћење"
|
||||
|
||||
#: ../src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1997
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "%d. радни простор"
|
||||
|
||||
#: ../src/core/screen.c:521
|
||||
#: src/core/screen.c:521
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display \"%s\" already has a window manager; try using the --replace option "
|
||||
@@ -595,16 +362,21 @@ msgstr ""
|
||||
"Приказ „%s“ већ има управника прозора; пробајте да користите опцију „--"
|
||||
"replace“ да замените тренутног управника прозора."
|
||||
|
||||
#: ../src/core/screen.c:603
|
||||
#: src/core/screen.c:606
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "Приказ „%d“ на екрану „%s“ није исправан\n"
|
||||
|
||||
#: ../src/core/util.c:121
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Матер је преведен без подршке за опширан режим\n"
|
||||
|
||||
#: ../src/x11/session.c:1815
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:595
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Режим прекидача: Режим %d"
|
||||
|
||||
#: src/x11/session.c:1815
|
||||
msgid ""
|
||||
"These windows do not support "save current setup" and will have to "
|
||||
"be restarted manually next time you log in."
|
||||
@@ -612,11 +384,189 @@ msgstr ""
|
||||
"Ови прозори не подржавају могућност „сачувај тренутна подешавања“ па ћете "
|
||||
"морати ручно да их поново покренете када се следећи пут пријавите."
|
||||
|
||||
#: ../src/x11/window-props.c:549
|
||||
#: src/x11/window-props.c:548
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (на %s)"
|
||||
|
||||
#~ msgid "Navigation"
|
||||
#~ msgstr "Навигација"
|
||||
|
||||
#~ msgid "Move window to workspace 1"
|
||||
#~ msgstr "Премешта прозор на радни простор број 1"
|
||||
|
||||
#~ msgid "Move window to workspace 2"
|
||||
#~ msgstr "Премешта прозор на радни простор број 2"
|
||||
|
||||
#~ msgid "Move window to workspace 3"
|
||||
#~ msgstr "Премешта прозор на радни простор број 3"
|
||||
|
||||
#~ msgid "Move window to workspace 4"
|
||||
#~ msgstr "Премешта прозор на радни простор број 4"
|
||||
|
||||
#~ msgid "Move window to last workspace"
|
||||
#~ msgstr "Премешта прозор на последњи радни простор"
|
||||
|
||||
#~ msgid "Move window one workspace to the left"
|
||||
#~ msgstr "Премешта прозор један радни простор на лево"
|
||||
|
||||
#~ msgid "Move window one workspace to the right"
|
||||
#~ msgstr "Премешта прозор један радни простор на десно"
|
||||
|
||||
#~ msgid "Move window one workspace up"
|
||||
#~ msgstr "Премешта прозор један радни простор на горе"
|
||||
|
||||
#~ msgid "Move window one workspace down"
|
||||
#~ msgstr "Премешта прозор један радни простор на доле"
|
||||
|
||||
#~ msgid "Move window one monitor to the left"
|
||||
#~ msgstr "Премешта прозор један монитор на лево"
|
||||
|
||||
#~ msgid "Move window one monitor to the right"
|
||||
#~ msgstr "Премешта прозор један монитор на десно"
|
||||
|
||||
#~ msgid "Move window one monitor up"
|
||||
#~ msgstr "Премешта прозор један монитор на горе"
|
||||
|
||||
#~ msgid "Move window one monitor down"
|
||||
#~ msgstr "Премешта прозор један монитор на доле"
|
||||
|
||||
#~ msgid "Switch applications"
|
||||
#~ msgstr "Пребацује програме"
|
||||
|
||||
#~ msgid "Switch to previous application"
|
||||
#~ msgstr "Пребацује на претходни програм"
|
||||
|
||||
#~ msgid "Switch windows"
|
||||
#~ msgstr "Пребацује прозоре"
|
||||
|
||||
#~ msgid "Switch to previous window"
|
||||
#~ msgstr "Пребацује на претходни прозор"
|
||||
|
||||
#~ msgid "Switch windows of an application"
|
||||
#~ msgstr "Пребацује прозоре програма"
|
||||
|
||||
#~ msgid "Switch to previous window of an application"
|
||||
#~ msgstr "Пребацује на претходни прозор програма"
|
||||
|
||||
#~ msgid "Switch to previous system control"
|
||||
#~ msgstr "Пребацује на претходну контролу система"
|
||||
|
||||
#~ msgid "Switch windows directly"
|
||||
#~ msgstr "Пребацује прозоре директно"
|
||||
|
||||
#~ msgid "Switch directly to previous window"
|
||||
#~ msgstr "Пребацује непосредно на претходни прозор"
|
||||
|
||||
#~ msgid "Switch windows of an app directly"
|
||||
#~ msgstr "Пребацује прозоре програма директно"
|
||||
|
||||
#~ msgid "Switch directly to previous window of an app"
|
||||
#~ msgstr "Пребацује непосредно на претходни прозор програма"
|
||||
|
||||
#~ msgid "Switch system controls directly"
|
||||
#~ msgstr "Пребацује контроле система директно"
|
||||
|
||||
#~ msgid "Switch directly to previous system control"
|
||||
#~ msgstr "Пребацује непосредно на претходну контролу система"
|
||||
|
||||
#~ msgid "Hide all normal windows"
|
||||
#~ msgstr "Скрива све обичне прозоре"
|
||||
|
||||
#~ msgid "Switch to workspace 1"
|
||||
#~ msgstr "Пребацује се на радни простор 1"
|
||||
|
||||
#~ msgid "Switch to workspace 2"
|
||||
#~ msgstr "Пребацује се на радни простор 2"
|
||||
|
||||
#~ msgid "Switch to workspace 3"
|
||||
#~ msgstr "Пребацује се на радни простор 3"
|
||||
|
||||
#~ msgid "Switch to workspace 4"
|
||||
#~ msgstr "Пребацује се на радни простор 4"
|
||||
|
||||
#~ msgid "Switch to last workspace"
|
||||
#~ msgstr "Пребацује се на последњи радни простор"
|
||||
|
||||
#~ msgid "Move to workspace left"
|
||||
#~ msgstr "Премешта на радни простор лево"
|
||||
|
||||
#~ msgid "Move to workspace right"
|
||||
#~ msgstr "Премешта на радни простор десно"
|
||||
|
||||
#~ msgid "Move to workspace above"
|
||||
#~ msgstr "Премешта на радни простор изнад"
|
||||
|
||||
#~ msgid "Move to workspace below"
|
||||
#~ msgstr "Премешта на радни простор испод"
|
||||
|
||||
#~ msgid "System"
|
||||
#~ msgstr "Систем"
|
||||
|
||||
#~ msgid "Show the run command prompt"
|
||||
#~ msgstr "Приказује промпт за покретање наредбе"
|
||||
|
||||
#~ msgid "Show the activities overview"
|
||||
#~ msgstr "Приказује преглед активности"
|
||||
|
||||
#~ msgid "Windows"
|
||||
#~ msgstr "Прозори"
|
||||
|
||||
#~ msgid "Activate the window menu"
|
||||
#~ msgstr "Активира мени прозора"
|
||||
|
||||
#~ msgid "Toggle fullscreen mode"
|
||||
#~ msgstr "Искључује/укључује приказ преко целог екрана"
|
||||
|
||||
#~ msgid "Toggle maximization state"
|
||||
#~ msgstr "Искључује/укључује стање увећања"
|
||||
|
||||
#~ msgid "Maximize window"
|
||||
#~ msgstr "Увећава прозор"
|
||||
|
||||
#~ msgid "Restore window"
|
||||
#~ msgstr "Враћа величину прозора"
|
||||
|
||||
#~ msgid "Toggle shaded state"
|
||||
#~ msgstr "Искључује/укључује стање засенчености"
|
||||
|
||||
#~ msgid "Close window"
|
||||
#~ msgstr "Затвара прозор"
|
||||
|
||||
#~ msgid "Hide window"
|
||||
#~ msgstr "Скрива прозор"
|
||||
|
||||
#~ msgid "Move window"
|
||||
#~ msgstr "Премешта прозор"
|
||||
|
||||
#~ msgid "Resize window"
|
||||
#~ msgstr "Мења величину прозора"
|
||||
|
||||
#~ msgid "Toggle window on all workspaces or one"
|
||||
#~ msgstr "Приказује прозор на свим радним просторима или само на једном"
|
||||
|
||||
#~ msgid "Raise window if covered, otherwise lower it"
|
||||
#~ msgstr ""
|
||||
#~ "Издиже прозор уколико га други прозор заклања, у противном га спушта"
|
||||
|
||||
#~ msgid "Raise window above other windows"
|
||||
#~ msgstr "Издиже прозор изнад осталих прозора"
|
||||
|
||||
#~ msgid "Lower window below other windows"
|
||||
#~ msgstr "Спушта прозор испод осталих прозора"
|
||||
|
||||
#~ msgid "Maximize window vertically"
|
||||
#~ msgstr "Увећава прозор вертикално"
|
||||
|
||||
#~ msgid "Maximize window horizontally"
|
||||
#~ msgstr "Увећава прозор хоризонтално"
|
||||
|
||||
#~ msgid "View split on left"
|
||||
#~ msgstr "Прикажите поделу на лево"
|
||||
|
||||
#~ msgid "View split on right"
|
||||
#~ msgstr "Прикажите поделу на десно"
|
||||
|
||||
#~ msgid "Failed to scan themes directory: %s\n"
|
||||
#~ msgstr "Нисам успео да прочитам директоријум тема: %s\n"
|
||||
|
||||
|
574
po/sr@latin.po
574
po/sr@latin.po
@@ -1,8 +1,7 @@
|
||||
# Serbian translation of mutter.
|
||||
# Courtesy of Prevod.org team (http://prevod.org/) -- 2003—2016.
|
||||
# This file is distributed under the same license as the mutter package.
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
# Goran Rakić <grakic@devbase.net>
|
||||
# Danilo Šegan <danilo@prevod.org>, 2005.
|
||||
# Miloš Popović <gpopac@gmail.com>, 2010.
|
||||
@@ -12,11 +11,11 @@ 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: 2016-03-09 01:41+0000\n"
|
||||
"PO-Revision-Date: 2016-03-09 09:52+0200\n"
|
||||
"POT-Creation-Date: 2016-08-19 21:04+0000\n"
|
||||
"PO-Revision-Date: 2016-08-28 11:11+0200\n"
|
||||
"Last-Translator: Miroslav Nikolić <miroslavnikolic@rocketmail.com>\n"
|
||||
"Language-Team: Serbian <(nothing)>\n"
|
||||
"Language: sr@latin\n"
|
||||
"Language-Team: srpski <gnome-sr@googlegroups.org>\n"
|
||||
"Language: sr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -24,255 +23,15 @@ msgstr ""
|
||||
"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Project-Style: gnome\n"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:1
|
||||
msgid "Navigation"
|
||||
msgstr "Navigacija"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:2
|
||||
msgid "Move window to workspace 1"
|
||||
msgstr "Premešta prozor na radni prostor broj 1"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:3
|
||||
msgid "Move window to workspace 2"
|
||||
msgstr "Premešta prozor na radni prostor broj 2"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:4
|
||||
msgid "Move window to workspace 3"
|
||||
msgstr "Premešta prozor na radni prostor broj 3"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:5
|
||||
msgid "Move window to workspace 4"
|
||||
msgstr "Premešta prozor na radni prostor broj 4"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:6
|
||||
msgid "Move window to last workspace"
|
||||
msgstr "Premešta prozor na poslednji radni prostor"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:7
|
||||
msgid "Move window one workspace to the left"
|
||||
msgstr "Premešta prozor jedan radni prostor na levo"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:8
|
||||
msgid "Move window one workspace to the right"
|
||||
msgstr "Premešta prozor jedan radni prostor na desno"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:9
|
||||
msgid "Move window one workspace up"
|
||||
msgstr "Premešta prozor jedan radni prostor na gore"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:10
|
||||
msgid "Move window one workspace down"
|
||||
msgstr "Premešta prozor jedan radni prostor na dole"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:11
|
||||
msgid "Move window one monitor to the left"
|
||||
msgstr "Premešta prozor jedan monitor na levo"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:12
|
||||
msgid "Move window one monitor to the right"
|
||||
msgstr "Premešta prozor jedan monitor na desno"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:13
|
||||
msgid "Move window one monitor up"
|
||||
msgstr "Premešta prozor jedan monitor na gore"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:14
|
||||
msgid "Move window one monitor down"
|
||||
msgstr "Premešta prozor jedan monitor na dole"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:15
|
||||
msgid "Switch applications"
|
||||
msgstr "Prebacuje programe"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:16
|
||||
msgid "Switch to previous application"
|
||||
msgstr "Prebacuje na prethodni program"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:17
|
||||
msgid "Switch windows"
|
||||
msgstr "Prebacuje prozore"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:18
|
||||
msgid "Switch to previous window"
|
||||
msgstr "Prebacuje na prethodni prozor"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:19
|
||||
msgid "Switch windows of an application"
|
||||
msgstr "Prebacuje prozore programa"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:20
|
||||
msgid "Switch to previous window of an application"
|
||||
msgstr "Prebacuje na prethodni prozor programa"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:21
|
||||
msgid "Switch system controls"
|
||||
msgstr "Prebacuje kontrole sistema"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:22
|
||||
msgid "Switch to previous system control"
|
||||
msgstr "Prebacuje na prethodnu kontrolu sistema"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:23
|
||||
msgid "Switch windows directly"
|
||||
msgstr "Prebacuje prozore direktno"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:24
|
||||
msgid "Switch directly to previous window"
|
||||
msgstr "Prebacuje neposredno na prethodni prozor"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:25
|
||||
msgid "Switch windows of an app directly"
|
||||
msgstr "Prebacuje prozore programa direktno"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:26
|
||||
msgid "Switch directly to previous window of an app"
|
||||
msgstr "Prebacuje neposredno na prethodni prozor programa"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:27
|
||||
msgid "Switch system controls directly"
|
||||
msgstr "Prebacuje kontrole sistema direktno"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:28
|
||||
msgid "Switch directly to previous system control"
|
||||
msgstr "Prebacuje neposredno na prethodnu kontrolu sistema"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:29
|
||||
msgid "Hide all normal windows"
|
||||
msgstr "Skriva sve obične prozore"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:30
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "Prebacuje se na radni prostor 1"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:31
|
||||
msgid "Switch to workspace 2"
|
||||
msgstr "Prebacuje se na radni prostor 2"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:32
|
||||
msgid "Switch to workspace 3"
|
||||
msgstr "Prebacuje se na radni prostor 3"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:33
|
||||
msgid "Switch to workspace 4"
|
||||
msgstr "Prebacuje se na radni prostor 4"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:34
|
||||
msgid "Switch to last workspace"
|
||||
msgstr "Prebacuje se na poslednji radni prostor"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:35
|
||||
msgid "Move to workspace left"
|
||||
msgstr "Premešta na radni prostor levo"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:36
|
||||
msgid "Move to workspace right"
|
||||
msgstr "Premešta na radni prostor desno"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:37
|
||||
msgid "Move to workspace above"
|
||||
msgstr "Premešta na radni prostor iznad"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:38
|
||||
msgid "Move to workspace below"
|
||||
msgstr "Premešta na radni prostor ispod"
|
||||
|
||||
#: ../data/50-mutter-system.xml.in.h:1
|
||||
msgid "System"
|
||||
msgstr "Sistem"
|
||||
|
||||
#: ../data/50-mutter-system.xml.in.h:2
|
||||
msgid "Show the run command prompt"
|
||||
msgstr "Prikazuje prompt za pokretanje naredbe"
|
||||
|
||||
#: ../data/50-mutter-system.xml.in.h:3
|
||||
msgid "Show the activities overview"
|
||||
msgstr "Prikazuje pregled aktivnosti"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:1
|
||||
msgid "Windows"
|
||||
msgstr "Prozori"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:2
|
||||
msgid "Activate the window menu"
|
||||
msgstr "Aktivira meni prozora"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:3
|
||||
msgid "Toggle fullscreen mode"
|
||||
msgstr "Isključuje/uključuje prikaz preko celog ekrana"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:4
|
||||
msgid "Toggle maximization state"
|
||||
msgstr "Isključuje/uključuje stanje uvećanja"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:5
|
||||
msgid "Maximize window"
|
||||
msgstr "Uvećava prozor"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:6
|
||||
msgid "Restore window"
|
||||
msgstr "Vraća veličinu prozora"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:7
|
||||
msgid "Toggle shaded state"
|
||||
msgstr "Isključuje/uključuje stanje zasenčenosti"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:8
|
||||
msgid "Close window"
|
||||
msgstr "Zatvara prozor"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:9
|
||||
msgid "Hide window"
|
||||
msgstr "Skriva prozor"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:10
|
||||
msgid "Move window"
|
||||
msgstr "Premešta prozor"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:11
|
||||
msgid "Resize window"
|
||||
msgstr "Menja veličinu prozora"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:12
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr "Prikazuje prozor na svim radnim prostorima ili samo na jednom"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:13
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
msgstr "Izdiže prozor ukoliko ga drugi prozor zaklanja, u protivnom ga spušta"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:14
|
||||
msgid "Raise window above other windows"
|
||||
msgstr "Izdiže prozor iznad ostalih prozora"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:15
|
||||
msgid "Lower window below other windows"
|
||||
msgstr "Spušta prozor ispod ostalih prozora"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:16
|
||||
msgid "Maximize window vertically"
|
||||
msgstr "Uvećava prozor vertikalno"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:17
|
||||
msgid "Maximize window horizontally"
|
||||
msgstr "Uvećava prozor horizontalno"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:18
|
||||
msgid "View split on left"
|
||||
msgstr "Prikažite podelu na levo"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:19
|
||||
msgid "View split on right"
|
||||
msgstr "Prikažite podelu na desno"
|
||||
|
||||
#: ../data/mutter.desktop.in.h:1
|
||||
#: data/mutter.desktop.in:4
|
||||
msgid "Mutter"
|
||||
msgstr "Mater"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:1
|
||||
#: data/org.gnome.mutter.gschema.xml.in:7
|
||||
msgid "Modifier to use for extended window management operations"
|
||||
msgstr "Taster koji se koristi za proširene radnje upravnika prozorima"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:2
|
||||
#: data/org.gnome.mutter.gschema.xml.in:8
|
||||
msgid ""
|
||||
"This key will initiate the \"overlay\", which is a combination window "
|
||||
"overview and application launching system. The default is intended to be the "
|
||||
@@ -284,11 +43,11 @@ msgstr ""
|
||||
"za komponente računara. Očekuje se da ovo vezuje ili podrazumevani ili niz "
|
||||
"praznih znakova."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:3
|
||||
#: data/org.gnome.mutter.gschema.xml.in:20
|
||||
msgid "Attach modal dialogs"
|
||||
msgstr "Prilaganje modalnih prozorčića"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:4
|
||||
#: data/org.gnome.mutter.gschema.xml.in:21
|
||||
msgid ""
|
||||
"When true, instead of having independent titlebars, modal dialogs appear "
|
||||
"attached to the titlebar of the parent window and are moved together with "
|
||||
@@ -298,12 +57,12 @@ msgstr ""
|
||||
"pojavljuju priloženi na traku alata matičnog prozora i bivaju premeštani "
|
||||
"zajedno sa matičnim prozorom."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:5
|
||||
#: data/org.gnome.mutter.gschema.xml.in:30
|
||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
msgstr ""
|
||||
"Uključuje popločavanje ivice prilikom otpuštanja prozora na ivicama ekrana"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:6
|
||||
#: data/org.gnome.mutter.gschema.xml.in:31
|
||||
msgid ""
|
||||
"If enabled, dropping windows on vertical screen edges maximizes them "
|
||||
"vertically and resizes them horizontally to cover half of the available "
|
||||
@@ -313,11 +72,11 @@ msgstr ""
|
||||
"uspravno i menja im veličinu vodoravno da prekriju polovinu dostupne oblasti. "
|
||||
"Otpuštanje prozora na gornjoj ivici ekrana uvećava ih u potpunosti."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:7
|
||||
#: data/org.gnome.mutter.gschema.xml.in:40
|
||||
msgid "Workspaces are managed dynamically"
|
||||
msgstr "Radnim prostorima se upravlja dinamički"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:8
|
||||
#: data/org.gnome.mutter.gschema.xml.in:41
|
||||
msgid ""
|
||||
"Determines whether workspaces are managed dynamically or whether there's a "
|
||||
"static number of workspaces (determined by the num-workspaces key in org."
|
||||
@@ -327,11 +86,11 @@ msgstr ""
|
||||
"stalni broj radnih prostora (određen brojem radnih prostora u „org.gnome."
|
||||
"desktop.wm.preferences“)."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:9
|
||||
#: data/org.gnome.mutter.gschema.xml.in:50
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr "Radni prostori samo na primarne"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:10
|
||||
#: data/org.gnome.mutter.gschema.xml.in:51
|
||||
msgid ""
|
||||
"Determines whether workspace switching should happen for windows on all "
|
||||
"monitors or only for windows on the primary monitor."
|
||||
@@ -339,11 +98,11 @@ msgstr ""
|
||||
"Određuje da li prebacivanje radnog prostora treba da se desi za prozore na "
|
||||
"svim monitorima ili samo za prozore na glavnom monitoru."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:11
|
||||
#: data/org.gnome.mutter.gschema.xml.in:59
|
||||
msgid "No tab popup"
|
||||
msgstr "Bez iskakanja jezička"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:12
|
||||
#: data/org.gnome.mutter.gschema.xml.in:60
|
||||
msgid ""
|
||||
"Determines whether the use of popup and highlight frame should be disabled "
|
||||
"for window cycling."
|
||||
@@ -351,11 +110,11 @@ msgstr ""
|
||||
"Određuje da li će upotreba okvira iskakanja i isticanja biti prikazana za "
|
||||
"kretanje po prozorima."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:13
|
||||
#: data/org.gnome.mutter.gschema.xml.in:68
|
||||
msgid "Delay focus changes until the pointer stops moving"
|
||||
msgstr "Zastoj prvog plana se menja dok se pokazivač ne zaustavi"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:14
|
||||
#: data/org.gnome.mutter.gschema.xml.in:69
|
||||
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 "
|
||||
@@ -365,11 +124,11 @@ msgstr ""
|
||||
"plan neće biti menjan odmah po ulasku u prozor, već samo nakon što pokazivač "
|
||||
"prestane da se pomera."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:15
|
||||
#: data/org.gnome.mutter.gschema.xml.in:79
|
||||
msgid "Draggable border width"
|
||||
msgstr "Širina ivice za prevlačenje"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:16
|
||||
#: data/org.gnome.mutter.gschema.xml.in:80
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
@@ -377,11 +136,11 @@ msgstr ""
|
||||
"Iznos ukupne ivice za prevlačenje. Ako vidljive ivice teme nisu dovoljne, biće "
|
||||
"dodate nevidljive ivice za dostizanje ove vrednosti."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:17
|
||||
#: data/org.gnome.mutter.gschema.xml.in:89
|
||||
msgid "Auto maximize nearly monitor sized windows"
|
||||
msgstr "Sam uvećava povećane prozore najbližeg monitora"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:18
|
||||
#: data/org.gnome.mutter.gschema.xml.in:90
|
||||
msgid ""
|
||||
"If enabled, new windows that are initially the size of the monitor "
|
||||
"automatically get maximized."
|
||||
@@ -389,11 +148,11 @@ msgstr ""
|
||||
"Ako je uključeno, novi prozori koji su početno veličine monitora samostalno "
|
||||
"bivaju uvećani."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:19
|
||||
#: data/org.gnome.mutter.gschema.xml.in:98
|
||||
msgid "Place new windows in the center"
|
||||
msgstr "Novi prozor u središte"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:20
|
||||
#: data/org.gnome.mutter.gschema.xml.in:99
|
||||
msgid ""
|
||||
"When true, the new windows will always be put in the center of the active "
|
||||
"screen of the monitor."
|
||||
@@ -401,85 +160,94 @@ msgstr ""
|
||||
"Ako je izabrano, novi prozori će uvek biti postavljeni na sredinu radnog "
|
||||
"ekrana monitora."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:21
|
||||
#: data/org.gnome.mutter.gschema.xml.in:120
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Bira prozor iz jezička iskakanja"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:22
|
||||
#: data/org.gnome.mutter.gschema.xml.in:125
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Otkazivanje jezička iskakanja"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:6
|
||||
msgid "Switch to VT 1"
|
||||
msgstr "Prelazak na VT 1"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:10
|
||||
msgid "Switch to VT 2"
|
||||
msgstr "Prelazak na VT 2"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:14
|
||||
msgid "Switch to VT 3"
|
||||
msgstr "Prelazak na VT 3"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:18
|
||||
msgid "Switch to VT 4"
|
||||
msgstr "Prelazak na VT 4"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:22
|
||||
msgid "Switch to VT 5"
|
||||
msgstr "Prelazak na VT 5"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:26
|
||||
msgid "Switch to VT 6"
|
||||
msgstr "Prelazak na VT 6"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:30
|
||||
msgid "Switch to VT 7"
|
||||
msgstr "Prelazak na VT 7"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:34
|
||||
msgid "Switch to VT 8"
|
||||
msgstr "Prelazak na VT 8"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:38
|
||||
msgid "Switch to VT 9"
|
||||
msgstr "Prelazak na VT 9"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:42
|
||||
msgid "Switch to VT 10"
|
||||
msgstr "Prelazak na VT 10"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:46
|
||||
msgid "Switch to VT 11"
|
||||
msgstr "Prelazak na VT 11"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:50
|
||||
msgid "Switch to VT 12"
|
||||
msgstr "Prelazak na VT 12"
|
||||
|
||||
#: ../src/backends/meta-monitor-manager.c:518
|
||||
#: src/backends/meta-input-settings.c:1707
|
||||
#| msgid "Switch system controls"
|
||||
msgid "Switch monitor"
|
||||
msgstr "Promeni monitor"
|
||||
|
||||
#: src/backends/meta-input-settings.c:1709
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Prikaži pomoć na ekranu"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:514
|
||||
msgid "Built-in display"
|
||||
msgstr "Ugrađeni displej"
|
||||
|
||||
#: ../src/backends/meta-monitor-manager.c:544
|
||||
#: src/backends/meta-monitor-manager.c:537
|
||||
msgid "Unknown"
|
||||
msgstr "Nepoznato"
|
||||
|
||||
#: ../src/backends/meta-monitor-manager.c:546
|
||||
#: src/backends/meta-monitor-manager.c:539
|
||||
msgid "Unknown Display"
|
||||
msgstr "Nepoznat displej"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: ../src/backends/meta-monitor-manager.c:554
|
||||
#: src/backends/meta-monitor-manager.c:547
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#. 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:456
|
||||
#: src/compositor/compositor.c:463
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
@@ -487,20 +255,20 @@ msgid ""
|
||||
msgstr ""
|
||||
"Neki drugi kompozitni upravnik je već pokrenut na prikazu %i erkana „%s“."
|
||||
|
||||
#: ../src/core/bell.c:185
|
||||
#: src/core/bell.c:194
|
||||
msgid "Bell event"
|
||||
msgstr "Zvonca"
|
||||
|
||||
#: ../src/core/delete.c:127
|
||||
#: src/core/delete.c:127
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "„%s“ ne daje odziv."
|
||||
|
||||
#: ../src/core/delete.c:129
|
||||
#: src/core/delete.c:129
|
||||
msgid "Application is not responding."
|
||||
msgstr "Program ne daje odziv."
|
||||
|
||||
#: ../src/core/delete.c:134
|
||||
#: src/core/delete.c:134
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@@ -508,57 +276,56 @@ msgstr ""
|
||||
"Možete malo sačekati dok se program ne sabere ili primorati program da "
|
||||
"kompletno prekine sa radom."
|
||||
|
||||
#: ../src/core/delete.c:141
|
||||
#: src/core/delete.c:141
|
||||
msgid "_Wait"
|
||||
msgstr "_Sačekaj"
|
||||
|
||||
#: ../src/core/delete.c:141
|
||||
#: src/core/delete.c:141
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Primoraj izlaz"
|
||||
|
||||
#: ../src/core/display.c:555
|
||||
#: src/core/display.c:590
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "Nisam uspeo da otvorim ekran „%s“ Iks sistema prozora\n"
|
||||
|
||||
#: ../src/core/main.c:181
|
||||
#: src/core/main.c:182
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Isključuje vezu sa upravnikom sesije"
|
||||
|
||||
#: ../src/core/main.c:187
|
||||
#: src/core/main.c:188
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Menja tekućeg upravnika prozorima"
|
||||
|
||||
#: ../src/core/main.c:193
|
||||
#: src/core/main.c:194
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Navodi IB upravnika sesije"
|
||||
|
||||
#: ../src/core/main.c:198
|
||||
#: src/core/main.c:199
|
||||
msgid "X Display to use"
|
||||
msgstr "Iks ekran koji će biti korišćen"
|
||||
|
||||
#: ../src/core/main.c:204
|
||||
#: src/core/main.c:205
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Pokreće sesiju iz datoteke čuvanja"
|
||||
|
||||
#: ../src/core/main.c:210
|
||||
#: src/core/main.c:211
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Čini Iks pozive usklađenim"
|
||||
|
||||
#: ../src/core/main.c:217
|
||||
#: src/core/main.c:218
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Radi kao vajlandov sastavnik"
|
||||
|
||||
#: ../src/core/main.c:223
|
||||
#| msgid "Run as a wayland compositor"
|
||||
#: src/core/main.c:224
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Radi kao ugneždeni sastavnik"
|
||||
|
||||
#: ../src/core/main.c:231
|
||||
#: src/core/main.c:232
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Radi kao puni server prikaza, umesto kao ugneždeni"
|
||||
|
||||
#: ../src/core/mutter.c:39
|
||||
#: src/core/mutter.c:39
|
||||
#, c-format
|
||||
msgid ""
|
||||
"mutter %s\n"
|
||||
@@ -573,20 +340,20 @@ msgstr ""
|
||||
"NE postoji nikakva garancija; čak ni garancija o TRŽIŠNOJ VREDNOSTI ili "
|
||||
"PRILAGOĐENOSTI ODREĐENOJ NAMENI.\n"
|
||||
|
||||
#: ../src/core/mutter.c:53
|
||||
#: src/core/mutter.c:53
|
||||
msgid "Print version"
|
||||
msgstr "Ispisuje izdanje"
|
||||
|
||||
#: ../src/core/mutter.c:59
|
||||
#: src/core/mutter.c:59
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Priključci Matera za korišćenje"
|
||||
|
||||
#: ../src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1997
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "%d. radni prostor"
|
||||
|
||||
#: ../src/core/screen.c:521
|
||||
#: src/core/screen.c:521
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display \"%s\" already has a window manager; try using the --replace option "
|
||||
@@ -595,16 +362,21 @@ msgstr ""
|
||||
"Prikaz „%s“ već ima upravnika prozora; probajte da koristite opciju „--"
|
||||
"replace“ da zamenite trenutnog upravnika prozora."
|
||||
|
||||
#: ../src/core/screen.c:603
|
||||
#: src/core/screen.c:606
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "Prikaz „%d“ na ekranu „%s“ nije ispravan\n"
|
||||
|
||||
#: ../src/core/util.c:121
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mater je preveden bez podrške za opširan režim\n"
|
||||
|
||||
#: ../src/x11/session.c:1815
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:595
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Režim prekidača: Režim %d"
|
||||
|
||||
#: src/x11/session.c:1815
|
||||
msgid ""
|
||||
"These windows do not support "save current setup" and will have to "
|
||||
"be restarted manually next time you log in."
|
||||
@@ -612,11 +384,189 @@ msgstr ""
|
||||
"Ovi prozori ne podržavaju mogućnost „sačuvaj trenutna podešavanja“ pa ćete "
|
||||
"morati ručno da ih ponovo pokrenete kada se sledeći put prijavite."
|
||||
|
||||
#: ../src/x11/window-props.c:549
|
||||
#: src/x11/window-props.c:548
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (na %s)"
|
||||
|
||||
#~ msgid "Navigation"
|
||||
#~ msgstr "Navigacija"
|
||||
|
||||
#~ msgid "Move window to workspace 1"
|
||||
#~ msgstr "Premešta prozor na radni prostor broj 1"
|
||||
|
||||
#~ msgid "Move window to workspace 2"
|
||||
#~ msgstr "Premešta prozor na radni prostor broj 2"
|
||||
|
||||
#~ msgid "Move window to workspace 3"
|
||||
#~ msgstr "Premešta prozor na radni prostor broj 3"
|
||||
|
||||
#~ msgid "Move window to workspace 4"
|
||||
#~ msgstr "Premešta prozor na radni prostor broj 4"
|
||||
|
||||
#~ msgid "Move window to last workspace"
|
||||
#~ msgstr "Premešta prozor na poslednji radni prostor"
|
||||
|
||||
#~ msgid "Move window one workspace to the left"
|
||||
#~ msgstr "Premešta prozor jedan radni prostor na levo"
|
||||
|
||||
#~ msgid "Move window one workspace to the right"
|
||||
#~ msgstr "Premešta prozor jedan radni prostor na desno"
|
||||
|
||||
#~ msgid "Move window one workspace up"
|
||||
#~ msgstr "Premešta prozor jedan radni prostor na gore"
|
||||
|
||||
#~ msgid "Move window one workspace down"
|
||||
#~ msgstr "Premešta prozor jedan radni prostor na dole"
|
||||
|
||||
#~ msgid "Move window one monitor to the left"
|
||||
#~ msgstr "Premešta prozor jedan monitor na levo"
|
||||
|
||||
#~ msgid "Move window one monitor to the right"
|
||||
#~ msgstr "Premešta prozor jedan monitor na desno"
|
||||
|
||||
#~ msgid "Move window one monitor up"
|
||||
#~ msgstr "Premešta prozor jedan monitor na gore"
|
||||
|
||||
#~ msgid "Move window one monitor down"
|
||||
#~ msgstr "Premešta prozor jedan monitor na dole"
|
||||
|
||||
#~ msgid "Switch applications"
|
||||
#~ msgstr "Prebacuje programe"
|
||||
|
||||
#~ msgid "Switch to previous application"
|
||||
#~ msgstr "Prebacuje na prethodni program"
|
||||
|
||||
#~ msgid "Switch windows"
|
||||
#~ msgstr "Prebacuje prozore"
|
||||
|
||||
#~ msgid "Switch to previous window"
|
||||
#~ msgstr "Prebacuje na prethodni prozor"
|
||||
|
||||
#~ msgid "Switch windows of an application"
|
||||
#~ msgstr "Prebacuje prozore programa"
|
||||
|
||||
#~ msgid "Switch to previous window of an application"
|
||||
#~ msgstr "Prebacuje na prethodni prozor programa"
|
||||
|
||||
#~ msgid "Switch to previous system control"
|
||||
#~ msgstr "Prebacuje na prethodnu kontrolu sistema"
|
||||
|
||||
#~ msgid "Switch windows directly"
|
||||
#~ msgstr "Prebacuje prozore direktno"
|
||||
|
||||
#~ msgid "Switch directly to previous window"
|
||||
#~ msgstr "Prebacuje neposredno na prethodni prozor"
|
||||
|
||||
#~ msgid "Switch windows of an app directly"
|
||||
#~ msgstr "Prebacuje prozore programa direktno"
|
||||
|
||||
#~ msgid "Switch directly to previous window of an app"
|
||||
#~ msgstr "Prebacuje neposredno na prethodni prozor programa"
|
||||
|
||||
#~ msgid "Switch system controls directly"
|
||||
#~ msgstr "Prebacuje kontrole sistema direktno"
|
||||
|
||||
#~ msgid "Switch directly to previous system control"
|
||||
#~ msgstr "Prebacuje neposredno na prethodnu kontrolu sistema"
|
||||
|
||||
#~ msgid "Hide all normal windows"
|
||||
#~ msgstr "Skriva sve obične prozore"
|
||||
|
||||
#~ msgid "Switch to workspace 1"
|
||||
#~ msgstr "Prebacuje se na radni prostor 1"
|
||||
|
||||
#~ msgid "Switch to workspace 2"
|
||||
#~ msgstr "Prebacuje se na radni prostor 2"
|
||||
|
||||
#~ msgid "Switch to workspace 3"
|
||||
#~ msgstr "Prebacuje se na radni prostor 3"
|
||||
|
||||
#~ msgid "Switch to workspace 4"
|
||||
#~ msgstr "Prebacuje se na radni prostor 4"
|
||||
|
||||
#~ msgid "Switch to last workspace"
|
||||
#~ msgstr "Prebacuje se na poslednji radni prostor"
|
||||
|
||||
#~ msgid "Move to workspace left"
|
||||
#~ msgstr "Premešta na radni prostor levo"
|
||||
|
||||
#~ msgid "Move to workspace right"
|
||||
#~ msgstr "Premešta na radni prostor desno"
|
||||
|
||||
#~ msgid "Move to workspace above"
|
||||
#~ msgstr "Premešta na radni prostor iznad"
|
||||
|
||||
#~ msgid "Move to workspace below"
|
||||
#~ msgstr "Premešta na radni prostor ispod"
|
||||
|
||||
#~ msgid "System"
|
||||
#~ msgstr "Sistem"
|
||||
|
||||
#~ msgid "Show the run command prompt"
|
||||
#~ msgstr "Prikazuje prompt za pokretanje naredbe"
|
||||
|
||||
#~ msgid "Show the activities overview"
|
||||
#~ msgstr "Prikazuje pregled aktivnosti"
|
||||
|
||||
#~ msgid "Windows"
|
||||
#~ msgstr "Prozori"
|
||||
|
||||
#~ msgid "Activate the window menu"
|
||||
#~ msgstr "Aktivira meni prozora"
|
||||
|
||||
#~ msgid "Toggle fullscreen mode"
|
||||
#~ msgstr "Isključuje/uključuje prikaz preko celog ekrana"
|
||||
|
||||
#~ msgid "Toggle maximization state"
|
||||
#~ msgstr "Isključuje/uključuje stanje uvećanja"
|
||||
|
||||
#~ msgid "Maximize window"
|
||||
#~ msgstr "Uvećava prozor"
|
||||
|
||||
#~ msgid "Restore window"
|
||||
#~ msgstr "Vraća veličinu prozora"
|
||||
|
||||
#~ msgid "Toggle shaded state"
|
||||
#~ msgstr "Isključuje/uključuje stanje zasenčenosti"
|
||||
|
||||
#~ msgid "Close window"
|
||||
#~ msgstr "Zatvara prozor"
|
||||
|
||||
#~ msgid "Hide window"
|
||||
#~ msgstr "Skriva prozor"
|
||||
|
||||
#~ msgid "Move window"
|
||||
#~ msgstr "Premešta prozor"
|
||||
|
||||
#~ msgid "Resize window"
|
||||
#~ msgstr "Menja veličinu prozora"
|
||||
|
||||
#~ msgid "Toggle window on all workspaces or one"
|
||||
#~ msgstr "Prikazuje prozor na svim radnim prostorima ili samo na jednom"
|
||||
|
||||
#~ msgid "Raise window if covered, otherwise lower it"
|
||||
#~ msgstr ""
|
||||
#~ "Izdiže prozor ukoliko ga drugi prozor zaklanja, u protivnom ga spušta"
|
||||
|
||||
#~ msgid "Raise window above other windows"
|
||||
#~ msgstr "Izdiže prozor iznad ostalih prozora"
|
||||
|
||||
#~ msgid "Lower window below other windows"
|
||||
#~ msgstr "Spušta prozor ispod ostalih prozora"
|
||||
|
||||
#~ msgid "Maximize window vertically"
|
||||
#~ msgstr "Uvećava prozor vertikalno"
|
||||
|
||||
#~ msgid "Maximize window horizontally"
|
||||
#~ msgstr "Uvećava prozor horizontalno"
|
||||
|
||||
#~ msgid "View split on left"
|
||||
#~ msgstr "Prikažite podelu na levo"
|
||||
|
||||
#~ msgid "View split on right"
|
||||
#~ msgstr "Prikažite podelu na desno"
|
||||
|
||||
#~ msgid "Failed to scan themes directory: %s\n"
|
||||
#~ msgstr "Nisam uspeo da pročitam direktorijum tema: %s\n"
|
||||
|
||||
|
@@ -61,8 +61,8 @@ mutter_built_sources += \
|
||||
gtk-shell-server-protocol.h \
|
||||
gtk-primary-selection-protocol.c \
|
||||
gtk-primary-selection-server-protocol.h \
|
||||
xdg-shell-unstable-v5-protocol.c \
|
||||
xdg-shell-unstable-v5-server-protocol.h \
|
||||
xdg-shell-unstable-v6-protocol.c \
|
||||
xdg-shell-unstable-v6-server-protocol.h \
|
||||
relative-pointer-unstable-v1-protocol.c \
|
||||
relative-pointer-unstable-v1-server-protocol.h \
|
||||
pointer-constraints-unstable-v1-protocol.c \
|
||||
@@ -347,6 +347,8 @@ libmutter_la_SOURCES += \
|
||||
wayland/meta-wayland-xdg-shell.h \
|
||||
wayland/meta-wayland-wl-shell.c \
|
||||
wayland/meta-wayland-wl-shell.h \
|
||||
wayland/meta-wayland-gtk-shell.c \
|
||||
wayland/meta-wayland-gtk-shell.h \
|
||||
$(NULL)
|
||||
endif
|
||||
|
||||
@@ -574,10 +576,10 @@ $(shell echo $1 | sed 's/\([a-z\-]\+\)-[a-z]\+-v[0-9]\+/\1/')
|
||||
endef
|
||||
|
||||
%-protocol.c : $(WAYLAND_PROTOCOLS_DATADIR)/$$(call protostability,$$*)/$$(call protoname,$$*)/$$*.xml
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) code < $< > $@
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) code $< $@
|
||||
%-server-protocol.h : $(WAYLAND_PROTOCOLS_DATADIR)/$$(call protostability,$$*)/$$(call protoname,$$*)/$$*.xml
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) server-header < $< > $@
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) server-header $< $@
|
||||
%-protocol.c : $(srcdir)/wayland/protocol/%.xml
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) code < $< > $@
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) code $< $@
|
||||
%-server-protocol.h : $(srcdir)/wayland/protocol/%.xml
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) server-header < $< > $@
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) server-header $< $@
|
||||
|
@@ -137,18 +137,33 @@ static char *
|
||||
make_output_name (drmModeConnector *connector)
|
||||
{
|
||||
static const char * const connector_type_names[] = {
|
||||
"unknown", "VGA", "DVII", "DVID", "DVID", "Composite",
|
||||
"SVIDEO", "LVDS", "Component", "9PinDIN", "DisplayPort",
|
||||
"HDMIA", "HDMIB", "TV", "eDP", "Virtual", "DSI"
|
||||
"None",
|
||||
"VGA",
|
||||
"DVI-I",
|
||||
"DVI-D",
|
||||
"DVI-A",
|
||||
"Composite",
|
||||
"SVIDEO",
|
||||
"LVDS",
|
||||
"Component",
|
||||
"DIN",
|
||||
"DP",
|
||||
"HDMI",
|
||||
"HDMI-B",
|
||||
"TV",
|
||||
"eDP",
|
||||
"Virtual",
|
||||
"DSI",
|
||||
};
|
||||
const char *connector_type_name;
|
||||
|
||||
if (connector->connector_type < G_N_ELEMENTS (connector_type_names))
|
||||
connector_type_name = connector_type_names[connector->connector_type];
|
||||
return g_strdup_printf ("%s-%d",
|
||||
connector_type_names[connector->connector_type],
|
||||
connector->connector_type_id);
|
||||
else
|
||||
connector_type_name = "unknown";
|
||||
|
||||
return g_strdup_printf ("%s%d", connector_type_name, connector->connector_id);
|
||||
return g_strdup_printf ("Unknown%d-%d",
|
||||
connector->connector_type,
|
||||
connector->connector_type_id);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -102,6 +102,7 @@ typedef enum
|
||||
PRIORITY_SIZE_HINTS_LIMITS = 3,
|
||||
PRIORITY_TITLEBAR_VISIBLE = 4,
|
||||
PRIORITY_PARTIALLY_VISIBLE_ON_WORKAREA = 4,
|
||||
PRIORITY_CUSTOM_RULE = 4,
|
||||
PRIORITY_MAXIMUM = 4 /* Dummy value used for loop end = max(all priorities) */
|
||||
} ConstraintPriority;
|
||||
|
||||
@@ -144,6 +145,10 @@ static gboolean do_screen_and_monitor_relative_constraints (MetaWindow *wind
|
||||
GList *region_spanning_rectangles,
|
||||
ConstraintInfo *info,
|
||||
gboolean check_only);
|
||||
static gboolean constrain_custom_rule (MetaWindow *window,
|
||||
ConstraintInfo *info,
|
||||
ConstraintPriority priority,
|
||||
gboolean check_only);
|
||||
static gboolean constrain_modal_dialog (MetaWindow *window,
|
||||
ConstraintInfo *info,
|
||||
ConstraintPriority priority,
|
||||
@@ -211,6 +216,7 @@ typedef struct {
|
||||
} Constraint;
|
||||
|
||||
static const Constraint all_constraints[] = {
|
||||
{constrain_custom_rule, "constrain_custom_rule"},
|
||||
{constrain_modal_dialog, "constrain_modal_dialog"},
|
||||
{constrain_maximization, "constrain_maximization"},
|
||||
{constrain_tiling, "constrain_tiling"},
|
||||
@@ -641,6 +647,222 @@ get_size_limits (MetaWindow *window,
|
||||
meta_window_client_rect_to_frame_rect (window, max_size, max_size);
|
||||
}
|
||||
|
||||
static void
|
||||
placement_rule_flip_horizontally (MetaPlacementRule *placement_rule)
|
||||
{
|
||||
if (placement_rule->anchor & META_PLACEMENT_ANCHOR_LEFT)
|
||||
{
|
||||
placement_rule->anchor &= ~META_PLACEMENT_ANCHOR_LEFT;
|
||||
placement_rule->anchor |= META_PLACEMENT_ANCHOR_RIGHT;
|
||||
}
|
||||
else if (placement_rule->anchor & META_PLACEMENT_ANCHOR_RIGHT)
|
||||
{
|
||||
placement_rule->anchor &= ~META_PLACEMENT_ANCHOR_RIGHT;
|
||||
placement_rule->anchor |= META_PLACEMENT_ANCHOR_LEFT;
|
||||
}
|
||||
|
||||
if (placement_rule->gravity & META_PLACEMENT_GRAVITY_LEFT)
|
||||
{
|
||||
placement_rule->gravity &= ~META_PLACEMENT_GRAVITY_LEFT;
|
||||
placement_rule->gravity |= META_PLACEMENT_GRAVITY_RIGHT;
|
||||
}
|
||||
else if (placement_rule->gravity & META_PLACEMENT_GRAVITY_RIGHT)
|
||||
{
|
||||
placement_rule->gravity &= ~META_PLACEMENT_GRAVITY_RIGHT;
|
||||
placement_rule->gravity |= META_PLACEMENT_GRAVITY_LEFT;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
placement_rule_flip_vertically (MetaPlacementRule *placement_rule)
|
||||
{
|
||||
if (placement_rule->anchor & META_PLACEMENT_ANCHOR_TOP)
|
||||
{
|
||||
placement_rule->anchor &= ~META_PLACEMENT_ANCHOR_TOP;
|
||||
placement_rule->anchor |= META_PLACEMENT_ANCHOR_BOTTOM;
|
||||
}
|
||||
else if (placement_rule->anchor & META_PLACEMENT_ANCHOR_BOTTOM)
|
||||
{
|
||||
placement_rule->anchor &= ~META_PLACEMENT_ANCHOR_BOTTOM;
|
||||
placement_rule->anchor |= META_PLACEMENT_ANCHOR_TOP;
|
||||
}
|
||||
|
||||
if (placement_rule->gravity & META_PLACEMENT_GRAVITY_TOP)
|
||||
{
|
||||
placement_rule->gravity &= ~META_PLACEMENT_GRAVITY_TOP;
|
||||
placement_rule->gravity |= META_PLACEMENT_GRAVITY_BOTTOM;
|
||||
}
|
||||
else if (placement_rule->gravity & META_PLACEMENT_GRAVITY_BOTTOM)
|
||||
{
|
||||
placement_rule->gravity &= ~META_PLACEMENT_GRAVITY_BOTTOM;
|
||||
placement_rule->gravity |= META_PLACEMENT_GRAVITY_TOP;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
try_flip_window_position (MetaWindow *window,
|
||||
ConstraintInfo *info,
|
||||
MetaPlacementRule *placement_rule,
|
||||
MetaPlacementConstraintAdjustment constraint_adjustment,
|
||||
MetaRectangle *rect,
|
||||
MetaRectangle *intersection)
|
||||
{
|
||||
MetaPlacementRule flipped_rule = *placement_rule;;
|
||||
MetaRectangle flipped_rect;
|
||||
MetaRectangle flipped_intersection;
|
||||
|
||||
switch (constraint_adjustment)
|
||||
{
|
||||
case META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_X:
|
||||
placement_rule_flip_horizontally (&flipped_rule);
|
||||
break;
|
||||
case META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_Y:
|
||||
placement_rule_flip_vertically (&flipped_rule);
|
||||
break;
|
||||
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
flipped_rect = info->current;
|
||||
meta_window_process_placement (window, &flipped_rule,
|
||||
&flipped_rect.x, &flipped_rect.y);
|
||||
meta_rectangle_intersect (&flipped_rect, &info->work_area_monitor,
|
||||
&flipped_intersection);
|
||||
|
||||
if ((constraint_adjustment == META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_X &&
|
||||
flipped_intersection.width == flipped_rect.width) ||
|
||||
(constraint_adjustment == META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_Y &&
|
||||
flipped_intersection.height == flipped_rect.height))
|
||||
{
|
||||
*placement_rule = flipped_rule;
|
||||
*rect = flipped_rect;
|
||||
*intersection = flipped_intersection;
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_custom_rule_satisfied (ConstraintInfo *info,
|
||||
MetaPlacementRule *placement_rule,
|
||||
MetaRectangle *intersection)
|
||||
{
|
||||
uint32_t x_constrain_actions, y_constrain_actions;
|
||||
|
||||
x_constrain_actions = (META_PLACEMENT_CONSTRAINT_ADJUSTMENT_SLIDE_X |
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_X);
|
||||
y_constrain_actions = (META_PLACEMENT_CONSTRAINT_ADJUSTMENT_SLIDE_Y |
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_Y);
|
||||
if ((placement_rule->constraint_adjustment & x_constrain_actions &&
|
||||
info->current.width != intersection->width) ||
|
||||
(placement_rule->constraint_adjustment & y_constrain_actions &&
|
||||
info->current.height != intersection->height))
|
||||
return FALSE;
|
||||
else
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
constrain_custom_rule (MetaWindow *window,
|
||||
ConstraintInfo *info,
|
||||
ConstraintPriority priority,
|
||||
gboolean check_only)
|
||||
{
|
||||
MetaPlacementRule *placement_rule;
|
||||
MetaRectangle intersection;
|
||||
gboolean constraint_satisfied;
|
||||
MetaPlacementRule current_rule;
|
||||
|
||||
if (priority > PRIORITY_CUSTOM_RULE)
|
||||
return TRUE;
|
||||
|
||||
placement_rule = meta_window_get_placement_rule (window);
|
||||
if (!placement_rule)
|
||||
return TRUE;
|
||||
|
||||
if (!meta_rectangle_could_fit_rect (&info->work_area_monitor,
|
||||
&info->current))
|
||||
return TRUE;
|
||||
|
||||
meta_rectangle_intersect (&info->current, &info->work_area_monitor,
|
||||
&intersection);
|
||||
|
||||
constraint_satisfied = is_custom_rule_satisfied (info,
|
||||
placement_rule,
|
||||
&intersection);
|
||||
|
||||
if (constraint_satisfied || check_only)
|
||||
return constraint_satisfied;
|
||||
|
||||
current_rule = *placement_rule;
|
||||
|
||||
if (info->current.width != intersection.width &&
|
||||
(current_rule.constraint_adjustment &
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_X))
|
||||
{
|
||||
try_flip_window_position (window, info, ¤t_rule,
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_X,
|
||||
&info->current, &intersection);
|
||||
}
|
||||
if (info->current.height != intersection.height &&
|
||||
(current_rule.constraint_adjustment &
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_Y))
|
||||
{
|
||||
try_flip_window_position (window, info, ¤t_rule,
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_Y,
|
||||
&info->current, &intersection);
|
||||
}
|
||||
|
||||
meta_rectangle_intersect (&info->current, &info->work_area_monitor,
|
||||
&intersection);
|
||||
constraint_satisfied = is_custom_rule_satisfied (info,
|
||||
placement_rule,
|
||||
&intersection);
|
||||
|
||||
if (constraint_satisfied)
|
||||
return TRUE;
|
||||
|
||||
if (current_rule.constraint_adjustment &
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_SLIDE_X)
|
||||
{
|
||||
if (info->current.x != intersection.x)
|
||||
info->current.x = intersection.x;
|
||||
else if (info->current.width != intersection.width)
|
||||
info->current.x -= info->current.width - intersection.width;
|
||||
}
|
||||
if (current_rule.constraint_adjustment &
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_SLIDE_Y)
|
||||
{
|
||||
if (info->current.y != intersection.y)
|
||||
info->current.y = intersection.y;
|
||||
else if (info->current.height != intersection.height)
|
||||
info->current.y -= info->current.height - intersection.height;
|
||||
}
|
||||
|
||||
meta_rectangle_intersect (&info->current, &info->work_area_monitor,
|
||||
&intersection);
|
||||
constraint_satisfied = is_custom_rule_satisfied (info,
|
||||
placement_rule,
|
||||
&intersection);
|
||||
|
||||
if (constraint_satisfied)
|
||||
return TRUE;
|
||||
|
||||
if (current_rule.constraint_adjustment &
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_RESIZE_X)
|
||||
{
|
||||
info->current.x = intersection.x;
|
||||
info->current.width = intersection.width;
|
||||
}
|
||||
if (current_rule.constraint_adjustment &
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_RESIZE_Y)
|
||||
{
|
||||
info->current.y = intersection.y;
|
||||
info->current.height = intersection.height;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
constrain_modal_dialog (MetaWindow *window,
|
||||
ConstraintInfo *info,
|
||||
@@ -652,7 +874,8 @@ constrain_modal_dialog (MetaWindow *window,
|
||||
MetaRectangle child_rect, parent_rect;
|
||||
gboolean constraint_already_satisfied;
|
||||
|
||||
if (!meta_window_is_attached_dialog (window))
|
||||
if (!meta_window_is_attached_dialog (window) ||
|
||||
meta_window_get_placement_rule (window))
|
||||
return TRUE;
|
||||
|
||||
/* We want to center the dialog on the parent, including the decorations
|
||||
@@ -1230,7 +1453,8 @@ constrain_to_single_monitor (MetaWindow *window,
|
||||
window->screen->n_monitor_infos == 1 ||
|
||||
!window->require_on_single_monitor ||
|
||||
!window->frame ||
|
||||
info->is_user_action)
|
||||
info->is_user_action ||
|
||||
meta_window_get_placement_rule (window))
|
||||
return TRUE;
|
||||
|
||||
/* Have a helper function handle the constraint for us */
|
||||
@@ -1257,7 +1481,8 @@ constrain_fully_onscreen (MetaWindow *window,
|
||||
window->type == META_WINDOW_DOCK ||
|
||||
window->fullscreen ||
|
||||
!window->require_fully_onscreen ||
|
||||
info->is_user_action)
|
||||
info->is_user_action ||
|
||||
meta_window_get_placement_rule (window))
|
||||
return TRUE;
|
||||
|
||||
/* Have a helper function handle the constraint for us */
|
||||
@@ -1296,7 +1521,8 @@ constrain_titlebar_visible (MetaWindow *window,
|
||||
window->type == META_WINDOW_DOCK ||
|
||||
window->fullscreen ||
|
||||
!window->require_titlebar_visible ||
|
||||
unconstrained_user_action)
|
||||
unconstrained_user_action ||
|
||||
meta_window_get_placement_rule (window))
|
||||
return TRUE;
|
||||
|
||||
/* Determine how much offscreen things are allowed. We first need to
|
||||
@@ -1373,7 +1599,8 @@ constrain_partially_onscreen (MetaWindow *window,
|
||||
* "onscreen" by their own strut).
|
||||
*/
|
||||
if (window->type == META_WINDOW_DESKTOP ||
|
||||
window->type == META_WINDOW_DOCK)
|
||||
window->type == META_WINDOW_DOCK ||
|
||||
meta_window_get_placement_rule (window))
|
||||
return TRUE;
|
||||
|
||||
/* Determine how much offscreen things are allowed. We first need to
|
||||
|
@@ -47,6 +47,18 @@
|
||||
(e)->type == CLUTTER_TOUCH_END || \
|
||||
(e)->type == CLUTTER_TOUCH_CANCEL)
|
||||
|
||||
#define IS_KEY_EVENT(e) ((e)->type == CLUTTER_KEY_PRESS || \
|
||||
(e)->type == CLUTTER_KEY_RELEASE)
|
||||
|
||||
static gboolean
|
||||
stage_has_key_focus (void)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
ClutterActor *stage = meta_backend_get_stage (backend);
|
||||
|
||||
return clutter_stage_get_key_focus (CLUTTER_STAGE (stage)) == stage;
|
||||
}
|
||||
|
||||
static MetaWindow *
|
||||
get_window_for_event (MetaDisplay *display,
|
||||
const ClutterEvent *event)
|
||||
@@ -58,14 +70,8 @@ get_window_for_event (MetaDisplay *display,
|
||||
ClutterActor *source;
|
||||
|
||||
/* Always use the key focused window for key events. */
|
||||
switch (event->type)
|
||||
{
|
||||
case CLUTTER_KEY_PRESS:
|
||||
case CLUTTER_KEY_RELEASE:
|
||||
return display->focus_window;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (IS_KEY_EVENT (event))
|
||||
return stage_has_key_focus () ? display->focus_window : NULL;
|
||||
|
||||
source = clutter_event_get_source (event);
|
||||
if (META_IS_SURFACE_ACTOR (source))
|
||||
@@ -299,6 +305,18 @@ meta_display_handle_event (MetaDisplay *display,
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Do not pass keyboard events to Wayland if key focus is not on the
|
||||
* stage in normal mode (e.g. during keynav in the panel)
|
||||
*/
|
||||
if (display->event_route == META_EVENT_ROUTE_NORMAL)
|
||||
{
|
||||
if (IS_KEY_EVENT (event) && !stage_has_key_focus ())
|
||||
{
|
||||
bypass_wayland = TRUE;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
if (display->current_pad_osd)
|
||||
{
|
||||
bypass_wayland = TRUE;
|
||||
|
@@ -598,6 +598,61 @@ find_first_fit (MetaWindow *window,
|
||||
return retval;
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_process_placement (MetaWindow *window,
|
||||
MetaPlacementRule *placement_rule,
|
||||
int *x,
|
||||
int *y)
|
||||
{
|
||||
MetaWindow *parent = meta_window_get_transient_for (window);
|
||||
MetaRectangle parent_rect;
|
||||
MetaRectangle anchor_rect;
|
||||
int window_width, window_height;
|
||||
|
||||
window_width = placement_rule->width;
|
||||
window_height = placement_rule->height;
|
||||
meta_window_get_frame_rect (parent, &parent_rect);
|
||||
|
||||
anchor_rect = (MetaRectangle) {
|
||||
.x = parent_rect.x + placement_rule->anchor_rect.x,
|
||||
.y = parent_rect.y + placement_rule->anchor_rect.y,
|
||||
.width = placement_rule->anchor_rect.width,
|
||||
.height = placement_rule->anchor_rect.height,
|
||||
};
|
||||
|
||||
/* Place at anchor point. */
|
||||
if (placement_rule->anchor & META_PLACEMENT_ANCHOR_LEFT)
|
||||
*x = anchor_rect.x;
|
||||
else if (placement_rule->anchor & META_PLACEMENT_ANCHOR_RIGHT)
|
||||
*x = anchor_rect.x + anchor_rect.width;
|
||||
else
|
||||
*x = anchor_rect.x + (anchor_rect.width / 2);
|
||||
if (placement_rule->anchor & META_PLACEMENT_ANCHOR_TOP)
|
||||
*y = anchor_rect.y;
|
||||
else if (placement_rule->anchor & META_PLACEMENT_ANCHOR_BOTTOM)
|
||||
*y = anchor_rect.y + anchor_rect.height;
|
||||
else
|
||||
*y = anchor_rect.y + (anchor_rect.height / 2);
|
||||
|
||||
/* Shift according to gravity. */
|
||||
if (placement_rule->gravity & META_PLACEMENT_GRAVITY_LEFT)
|
||||
*x -= window_width;
|
||||
else if (placement_rule->gravity & META_PLACEMENT_GRAVITY_RIGHT)
|
||||
*x = *x;
|
||||
else
|
||||
*x -= window_width / 2;
|
||||
if (placement_rule->gravity & META_PLACEMENT_GRAVITY_TOP)
|
||||
*y -= window_height;
|
||||
else if (placement_rule->gravity & META_PLACEMENT_GRAVITY_BOTTOM)
|
||||
*y = *y;
|
||||
else
|
||||
*y -= window_height / 2;
|
||||
|
||||
/* Offset according to offset. */
|
||||
*x += placement_rule->offset_x;
|
||||
*y += placement_rule->offset_y;
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_place (MetaWindow *window,
|
||||
int x,
|
||||
@@ -610,6 +665,16 @@ meta_window_place (MetaWindow *window,
|
||||
|
||||
meta_topic (META_DEBUG_PLACEMENT, "Placing window %s\n", window->desc);
|
||||
|
||||
/* If the window has a custom placement rule, always run only that. */
|
||||
if (window->placement_rule)
|
||||
{
|
||||
meta_window_process_placement (window,
|
||||
window->placement_rule,
|
||||
&x, &y);
|
||||
|
||||
goto done;
|
||||
}
|
||||
|
||||
switch (window->type)
|
||||
{
|
||||
/* Run placement algorithm on these. */
|
||||
|
@@ -25,6 +25,11 @@
|
||||
#include "window-private.h"
|
||||
#include "frame.h"
|
||||
|
||||
void meta_window_process_placement (MetaWindow *window,
|
||||
MetaPlacementRule *placement_rule,
|
||||
int *x,
|
||||
int *y);
|
||||
|
||||
void meta_window_place (MetaWindow *window,
|
||||
int x,
|
||||
int y,
|
||||
|
@@ -88,6 +88,47 @@ typedef enum
|
||||
META_MOVE_RESIZE_RESULT_FRAME_SHAPE_CHANGED = 1 << 2,
|
||||
} MetaMoveResizeResultFlags;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
META_PLACEMENT_GRAVITY_NONE = 0,
|
||||
META_PLACEMENT_GRAVITY_TOP = 1 << 0,
|
||||
META_PLACEMENT_GRAVITY_BOTTOM = 1 << 1,
|
||||
META_PLACEMENT_GRAVITY_LEFT = 1 << 2,
|
||||
META_PLACEMENT_GRAVITY_RIGHT = 1 << 3,
|
||||
} MetaPlacementGravity;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
META_PLACEMENT_ANCHOR_NONE = 0,
|
||||
META_PLACEMENT_ANCHOR_TOP = 1 << 0,
|
||||
META_PLACEMENT_ANCHOR_BOTTOM = 1 << 1,
|
||||
META_PLACEMENT_ANCHOR_LEFT = 1 << 2,
|
||||
META_PLACEMENT_ANCHOR_RIGHT = 1 << 3,
|
||||
} MetaPlacementAnchor;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_NONE = 0,
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_SLIDE_X = 1 << 0,
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_SLIDE_Y = 1 << 1,
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_X = 1 << 2,
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_Y = 1 << 3,
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_RESIZE_X = 1 << 4,
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_RESIZE_Y = 1 << 5,
|
||||
} MetaPlacementConstraintAdjustment;
|
||||
|
||||
typedef struct _MetaPlacementRule
|
||||
{
|
||||
MetaRectangle anchor_rect;
|
||||
MetaPlacementGravity gravity;
|
||||
MetaPlacementAnchor anchor;
|
||||
MetaPlacementConstraintAdjustment constraint_adjustment;
|
||||
int offset_x;
|
||||
int offset_y;
|
||||
int width;
|
||||
int height;
|
||||
} MetaPlacementRule;
|
||||
|
||||
struct _MetaWindow
|
||||
{
|
||||
GObject parent_instance;
|
||||
@@ -448,6 +489,8 @@ struct _MetaWindow
|
||||
|
||||
/* Bypass compositor hints */
|
||||
guint bypass_compositor;
|
||||
|
||||
MetaPlacementRule *placement_rule;
|
||||
};
|
||||
|
||||
struct _MetaWindowClass
|
||||
@@ -697,4 +740,8 @@ gboolean meta_window_has_pointer (MetaWindow *window);
|
||||
|
||||
void meta_window_emit_size_changed (MetaWindow *window);
|
||||
|
||||
MetaPlacementRule *meta_window_get_placement_rule (MetaWindow *window);
|
||||
|
||||
void meta_window_force_placement (MetaWindow *window);
|
||||
|
||||
#endif
|
||||
|
@@ -84,8 +84,6 @@ static void set_net_wm_state (MetaWindow *window);
|
||||
static void meta_window_set_above (MetaWindow *window,
|
||||
gboolean new_value);
|
||||
|
||||
static void meta_window_force_placement (MetaWindow *window);
|
||||
|
||||
static void meta_window_show (MetaWindow *window);
|
||||
static void meta_window_hide (MetaWindow *window);
|
||||
|
||||
@@ -296,6 +294,7 @@ meta_window_finalize (GObject *object)
|
||||
g_free (window->gtk_window_object_path);
|
||||
g_free (window->gtk_app_menu_object_path);
|
||||
g_free (window->gtk_menubar_object_path);
|
||||
g_free (window->placement_rule);
|
||||
|
||||
G_OBJECT_CLASS (meta_window_parent_class)->finalize (object);
|
||||
}
|
||||
@@ -2168,7 +2167,7 @@ window_would_be_covered (const MetaWindow *newbie)
|
||||
return FALSE; /* none found */
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
meta_window_force_placement (MetaWindow *window)
|
||||
{
|
||||
if (window->placed)
|
||||
@@ -4301,6 +4300,13 @@ meta_window_focus (MetaWindow *window,
|
||||
|
||||
META_WINDOW_GET_CLASS (window)->focus (window, timestamp);
|
||||
|
||||
if (window->display->event_route == META_EVENT_ROUTE_NORMAL)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
ClutterStage *stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
|
||||
clutter_stage_set_key_focus (stage, NULL);
|
||||
}
|
||||
|
||||
if (window->wm_state_demands_attention)
|
||||
meta_window_unset_demands_attention(window);
|
||||
|
||||
@@ -7416,23 +7422,26 @@ meta_window_set_transient_for (MetaWindow *window,
|
||||
|
||||
/* may now be a dialog */
|
||||
if (window->client_type == META_WINDOW_CLIENT_TYPE_X11)
|
||||
meta_window_x11_recalc_window_type (window);
|
||||
|
||||
if (!window->constructing)
|
||||
{
|
||||
/* If the window attaches, detaches, or changes attached
|
||||
* parents, we need to destroy the MetaWindow and let a new one
|
||||
* be created (which happens as a side effect of
|
||||
* meta_window_unmanage()). The condition below is correct
|
||||
* because we know window->transient_for has changed.
|
||||
*/
|
||||
if (window->attached || meta_window_should_attach_to_parent (window))
|
||||
{
|
||||
guint32 timestamp;
|
||||
meta_window_x11_recalc_window_type (window);
|
||||
|
||||
timestamp = meta_display_get_current_time_roundtrip (window->display);
|
||||
meta_window_unmanage (window, timestamp);
|
||||
return;
|
||||
if (!window->constructing)
|
||||
{
|
||||
/* If the window attaches, detaches, or changes attached
|
||||
* parents, we need to destroy the MetaWindow and let a new one
|
||||
* be created (which happens as a side effect of
|
||||
* meta_window_unmanage()). The condition below is correct
|
||||
* because we know window->transient_for has changed.
|
||||
*/
|
||||
if (window->attached || meta_window_should_attach_to_parent (window))
|
||||
{
|
||||
guint32 timestamp;
|
||||
|
||||
timestamp =
|
||||
meta_display_get_current_time_roundtrip (window->display);
|
||||
meta_window_unmanage (window, timestamp);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7925,3 +7934,9 @@ meta_window_emit_size_changed (MetaWindow *window)
|
||||
{
|
||||
g_signal_emit (window, window_signals[SIZE_CHANGED], 0);
|
||||
}
|
||||
|
||||
MetaPlacementRule *
|
||||
meta_window_get_placement_rule (MetaWindow *window)
|
||||
{
|
||||
return window->placement_rule;
|
||||
}
|
||||
|
@@ -106,8 +106,10 @@ meta_wayland_buffer_ensure_texture (MetaWaylandBuffer *buffer)
|
||||
|
||||
if (!texture)
|
||||
{
|
||||
meta_warning ("Could not import pending buffer, ignoring commit: %s\n",
|
||||
catch_error->message);
|
||||
cogl_error_free (catch_error);
|
||||
meta_fatal ("Could not import pending buffer, ignoring commit\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
buffer->texture = texture;
|
||||
|
@@ -1174,7 +1174,8 @@ data_device_start_drag (struct wl_client *client,
|
||||
|
||||
if (icon_resource &&
|
||||
!meta_wayland_surface_assign_role (icon_surface,
|
||||
META_TYPE_WAYLAND_SURFACE_ROLE_DND))
|
||||
META_TYPE_WAYLAND_SURFACE_ROLE_DND,
|
||||
NULL))
|
||||
{
|
||||
wl_resource_post_error (resource, WL_DATA_DEVICE_ERROR_ROLE,
|
||||
"wl_surface@%d already has a different role",
|
||||
|
289
src/wayland/meta-wayland-gtk-shell.c
Normal file
289
src/wayland/meta-wayland-gtk-shell.c
Normal file
@@ -0,0 +1,289 @@
|
||||
/*
|
||||
* Wayland Support
|
||||
*
|
||||
* Copyright (C) 2012,2013 Intel Corporation
|
||||
* 2013-2016 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "wayland/meta-wayland-gtk-shell.h"
|
||||
|
||||
#include "core/bell.h"
|
||||
#include "core/window-private.h"
|
||||
#include "wayland/meta-wayland-private.h"
|
||||
#include "wayland/meta-wayland-surface.h"
|
||||
#include "wayland/meta-wayland-versions.h"
|
||||
#include "wayland/meta-window-wayland.h"
|
||||
|
||||
#include "gtk-shell-server-protocol.h"
|
||||
|
||||
static GQuark quark_gtk_surface_data = 0;
|
||||
|
||||
typedef struct _MetaWaylandGtkSurface
|
||||
{
|
||||
struct wl_resource *resource;
|
||||
MetaWaylandSurface *surface;
|
||||
gboolean is_modal;
|
||||
gulong configure_handler_id;
|
||||
} MetaWaylandGtkSurface;
|
||||
|
||||
static void
|
||||
gtk_surface_destructor (struct wl_resource *resource)
|
||||
{
|
||||
MetaWaylandGtkSurface *gtk_surface = wl_resource_get_user_data (resource);
|
||||
|
||||
if (gtk_surface->surface)
|
||||
{
|
||||
g_object_steal_qdata (G_OBJECT (gtk_surface->surface),
|
||||
quark_gtk_surface_data);
|
||||
g_signal_handler_disconnect (gtk_surface->surface,
|
||||
gtk_surface->configure_handler_id);
|
||||
}
|
||||
|
||||
g_free (gtk_surface);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_surface_set_dbus_properties (struct wl_client *client,
|
||||
struct wl_resource *resource,
|
||||
const char *application_id,
|
||||
const char *app_menu_path,
|
||||
const char *menubar_path,
|
||||
const char *window_object_path,
|
||||
const char *application_object_path,
|
||||
const char *unique_bus_name)
|
||||
{
|
||||
MetaWaylandGtkSurface *gtk_surface = wl_resource_get_user_data (resource);
|
||||
MetaWaylandSurface *surface = gtk_surface->surface;
|
||||
|
||||
/* Broken client, let it die instead of us */
|
||||
if (!surface->window)
|
||||
{
|
||||
meta_warning ("meta-wayland-surface: set_dbus_properties called with invalid window!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
meta_window_set_gtk_dbus_properties (surface->window,
|
||||
application_id,
|
||||
unique_bus_name,
|
||||
app_menu_path,
|
||||
menubar_path,
|
||||
application_object_path,
|
||||
window_object_path);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_surface_set_modal (struct wl_client *client,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
MetaWaylandGtkSurface *gtk_surface = wl_resource_get_user_data (resource);
|
||||
MetaWaylandSurface *surface = gtk_surface->surface;
|
||||
|
||||
if (gtk_surface->is_modal)
|
||||
return;
|
||||
|
||||
gtk_surface->is_modal = TRUE;
|
||||
meta_window_set_type (surface->window, META_WINDOW_MODAL_DIALOG);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_surface_unset_modal (struct wl_client *client,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
MetaWaylandGtkSurface *gtk_surface = wl_resource_get_user_data (resource);
|
||||
MetaWaylandSurface *surface = gtk_surface->surface;
|
||||
|
||||
if (!gtk_surface->is_modal)
|
||||
return;
|
||||
|
||||
gtk_surface->is_modal = FALSE;
|
||||
meta_window_set_type (surface->window, META_WINDOW_NORMAL);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_surface_present (struct wl_client *client,
|
||||
struct wl_resource *resource,
|
||||
uint32_t timestamp)
|
||||
{
|
||||
MetaWaylandGtkSurface *gtk_surface = wl_resource_get_user_data (resource);
|
||||
MetaWaylandSurface *surface = gtk_surface->surface;
|
||||
MetaWindow *window = surface->window;
|
||||
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
meta_window_activate_full (window, timestamp,
|
||||
META_CLIENT_TYPE_APPLICATION, NULL);
|
||||
}
|
||||
|
||||
static const struct gtk_surface1_interface meta_wayland_gtk_surface_interface = {
|
||||
gtk_surface_set_dbus_properties,
|
||||
gtk_surface_set_modal,
|
||||
gtk_surface_unset_modal,
|
||||
gtk_surface_present,
|
||||
};
|
||||
|
||||
static void
|
||||
gtk_surface_surface_destroyed (MetaWaylandGtkSurface *gtk_surface)
|
||||
{
|
||||
wl_resource_set_implementation (gtk_surface->resource,
|
||||
NULL, NULL, NULL);
|
||||
gtk_surface->surface = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
fill_states (struct wl_array *states,
|
||||
MetaWindow *window)
|
||||
{
|
||||
uint32_t *s;
|
||||
|
||||
if (window->tile_mode == META_TILE_LEFT ||
|
||||
window->tile_mode == META_TILE_RIGHT)
|
||||
{
|
||||
s = wl_array_add (states, sizeof *s);
|
||||
*s = GTK_SURFACE1_STATE_TILED;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
on_configure (MetaWaylandSurface *surface,
|
||||
MetaWaylandGtkSurface *gtk_surface)
|
||||
{
|
||||
struct wl_array states;
|
||||
|
||||
wl_array_init (&states);
|
||||
fill_states (&states, surface->window);
|
||||
|
||||
gtk_surface1_send_configure (gtk_surface->resource, &states);
|
||||
|
||||
wl_array_release (&states);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_shell_get_gtk_surface (struct wl_client *client,
|
||||
struct wl_resource *resource,
|
||||
guint32 id,
|
||||
struct wl_resource *surface_resource)
|
||||
{
|
||||
MetaWaylandSurface *surface = wl_resource_get_user_data (surface_resource);
|
||||
MetaWaylandGtkSurface *gtk_surface;
|
||||
|
||||
gtk_surface = g_object_get_qdata (G_OBJECT (surface), quark_gtk_surface_data);
|
||||
if (gtk_surface)
|
||||
{
|
||||
wl_resource_post_error (surface_resource,
|
||||
WL_DISPLAY_ERROR_INVALID_OBJECT,
|
||||
"gtk_shell::get_gtk_surface already requested");
|
||||
return;
|
||||
}
|
||||
|
||||
gtk_surface = g_new0 (MetaWaylandGtkSurface, 1);
|
||||
gtk_surface->surface = surface;
|
||||
gtk_surface->resource = wl_resource_create (client,
|
||||
>k_surface1_interface,
|
||||
wl_resource_get_version (resource),
|
||||
id);
|
||||
wl_resource_set_implementation (gtk_surface->resource,
|
||||
&meta_wayland_gtk_surface_interface,
|
||||
gtk_surface, gtk_surface_destructor);
|
||||
|
||||
gtk_surface->configure_handler_id = g_signal_connect (surface,
|
||||
"configure",
|
||||
G_CALLBACK (on_configure),
|
||||
gtk_surface);
|
||||
|
||||
g_object_set_qdata_full (G_OBJECT (surface),
|
||||
quark_gtk_surface_data,
|
||||
gtk_surface,
|
||||
(GDestroyNotify) gtk_surface_surface_destroyed);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_shell_set_startup_id (struct wl_client *client,
|
||||
struct wl_resource *resource,
|
||||
const char *startup_id)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_get_display ();
|
||||
meta_startup_notification_remove_sequence (display->startup_notification,
|
||||
startup_id);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_shell_system_bell (struct wl_client *client,
|
||||
struct wl_resource *resource,
|
||||
struct wl_resource *gtk_surface_resource)
|
||||
{
|
||||
MetaDisplay *display = meta_get_display ();
|
||||
|
||||
if (gtk_surface_resource)
|
||||
{
|
||||
MetaWaylandGtkSurface *gtk_surface =
|
||||
wl_resource_get_user_data (gtk_surface_resource);
|
||||
MetaWaylandSurface *surface = gtk_surface->surface;
|
||||
|
||||
if (!surface->window)
|
||||
return;
|
||||
|
||||
meta_bell_notify (display, surface->window);
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_bell_notify (display, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static const struct gtk_shell1_interface meta_wayland_gtk_shell_interface = {
|
||||
gtk_shell_get_gtk_surface,
|
||||
gtk_shell_set_startup_id,
|
||||
gtk_shell_system_bell,
|
||||
};
|
||||
|
||||
static void
|
||||
bind_gtk_shell (struct wl_client *client,
|
||||
void *data,
|
||||
guint32 version,
|
||||
guint32 id)
|
||||
{
|
||||
struct wl_resource *resource;
|
||||
uint32_t capabilities = 0;
|
||||
|
||||
resource = wl_resource_create (client, >k_shell1_interface, version, id);
|
||||
wl_resource_set_implementation (resource, &meta_wayland_gtk_shell_interface,
|
||||
data, NULL);
|
||||
|
||||
if (!meta_prefs_get_show_fallback_app_menu ())
|
||||
capabilities = GTK_SHELL1_CAPABILITY_GLOBAL_APP_MENU;
|
||||
|
||||
gtk_shell1_send_capabilities (resource, capabilities);
|
||||
}
|
||||
|
||||
void
|
||||
meta_wayland_gtk_shell_init (MetaWaylandCompositor *compositor)
|
||||
{
|
||||
quark_gtk_surface_data =
|
||||
g_quark_from_static_string ("-meta-wayland-gtk-shell-surface-data");
|
||||
|
||||
if (wl_global_create (compositor->wayland_display,
|
||||
>k_shell1_interface,
|
||||
META_GTK_SHELL1_VERSION,
|
||||
compositor, bind_gtk_shell) == NULL)
|
||||
g_error ("Failed to register a global gtk-shell object");
|
||||
}
|
27
src/wayland/meta-wayland-gtk-shell.h
Normal file
27
src/wayland/meta-wayland-gtk-shell.h
Normal file
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef META_WAYLAND_GTK_SHELL_H
|
||||
#define META_WAYLAND_GTK_SHELL_H
|
||||
|
||||
#include "wayland/meta-wayland.h"
|
||||
|
||||
void meta_wayland_gtk_shell_init (MetaWaylandCompositor *compositor);
|
||||
|
||||
#endif /* META_WAYLAND_GTK_SHELL_H */
|
@@ -1005,7 +1005,8 @@ pointer_set_cursor (struct wl_client *client,
|
||||
|
||||
if (surface &&
|
||||
!meta_wayland_surface_assign_role (surface,
|
||||
META_TYPE_WAYLAND_SURFACE_ROLE_CURSOR))
|
||||
META_TYPE_WAYLAND_SURFACE_ROLE_CURSOR,
|
||||
NULL))
|
||||
{
|
||||
wl_resource_post_error (resource, WL_POINTER_ERROR_ROLE,
|
||||
"wl_surface@%d already has a different role",
|
||||
|
@@ -242,7 +242,20 @@ meta_wayland_popup_dismiss (MetaWaylandPopup *popup)
|
||||
meta_wayland_popup_destroy (popup);
|
||||
|
||||
if (wl_list_empty (&popup_grab->all_popups))
|
||||
meta_wayland_pointer_end_popup_grab (popup_grab->generic.pointer);
|
||||
{
|
||||
meta_wayland_pointer_end_popup_grab (popup_grab->generic.pointer);
|
||||
}
|
||||
else
|
||||
{
|
||||
MetaWaylandSurface *top_popup_surface;
|
||||
MetaWaylandSeat *seat;
|
||||
MetaWaylandKeyboard *keyboard;
|
||||
|
||||
top_popup_surface = meta_wayland_popup_grab_get_top_popup (popup_grab);
|
||||
seat = meta_wayland_pointer_get_seat (popup_grab->generic.pointer);
|
||||
keyboard = &seat->keyboard;
|
||||
meta_wayland_keyboard_set_focus (keyboard, top_popup_surface);
|
||||
}
|
||||
}
|
||||
|
||||
MetaWaylandSurface *
|
||||
@@ -258,6 +271,8 @@ meta_wayland_popup_create (MetaWaylandPopupSurface *popup_surface,
|
||||
MetaWaylandSurface *surface =
|
||||
meta_wayland_popup_surface_get_surface (popup_surface);
|
||||
MetaWaylandPopup *popup;
|
||||
MetaWaylandSeat *seat;
|
||||
MetaWaylandKeyboard *keyboard;
|
||||
|
||||
/* Don't allow creating popups if the grab has a different client. */
|
||||
if (grab->grab_client != wl_resource_get_client (surface->resource))
|
||||
@@ -269,5 +284,9 @@ meta_wayland_popup_create (MetaWaylandPopupSurface *popup_surface,
|
||||
|
||||
wl_list_insert (&grab->all_popups, &popup->link);
|
||||
|
||||
seat = meta_wayland_pointer_get_seat (grab->generic.pointer);
|
||||
keyboard = &seat->keyboard;
|
||||
meta_wayland_keyboard_set_focus (keyboard, surface);
|
||||
|
||||
return popup;
|
||||
}
|
||||
|
@@ -29,8 +29,8 @@
|
||||
#include <clutter/wayland/clutter-wayland-surface.h>
|
||||
#include <cogl/cogl-wayland-server.h>
|
||||
|
||||
#include <gobject/gvaluecollector.h>
|
||||
#include <wayland-server.h>
|
||||
#include "gtk-shell-server-protocol.h"
|
||||
|
||||
#include "meta-wayland-private.h"
|
||||
#include "meta-xwayland-private.h"
|
||||
@@ -43,12 +43,12 @@
|
||||
#include "meta-wayland-outputs.h"
|
||||
#include "meta-wayland-xdg-shell.h"
|
||||
#include "meta-wayland-wl-shell.h"
|
||||
#include "meta-wayland-gtk-shell.h"
|
||||
|
||||
#include "meta-cursor-tracker-private.h"
|
||||
#include "display-private.h"
|
||||
#include "window-private.h"
|
||||
#include "meta-window-wayland.h"
|
||||
#include "bell.h"
|
||||
|
||||
#include "compositor/region-utils.h"
|
||||
|
||||
@@ -62,6 +62,13 @@ enum {
|
||||
PENDING_STATE_SIGNAL_LAST_SIGNAL
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
SURFACE_ROLE_PROP_0,
|
||||
|
||||
SURFACE_ROLE_PROP_SURFACE,
|
||||
};
|
||||
|
||||
static guint pending_state_signals[PENDING_STATE_SIGNAL_LAST_SIGNAL];
|
||||
|
||||
typedef struct _MetaWaylandSurfaceRolePrivate
|
||||
@@ -102,7 +109,7 @@ G_DEFINE_TYPE (MetaWaylandPendingState,
|
||||
|
||||
struct _MetaWaylandSurfaceRoleSubsurface
|
||||
{
|
||||
MetaWaylandSurfaceRole parent;
|
||||
MetaWaylandSurfaceRoleActorSurface parent;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (MetaWaylandSurfaceRoleSubsurface,
|
||||
@@ -121,6 +128,7 @@ G_DEFINE_TYPE (MetaWaylandSurfaceRoleDND,
|
||||
enum {
|
||||
SURFACE_DESTROY,
|
||||
SURFACE_UNMAPPED,
|
||||
SURFACE_CONFIGURE,
|
||||
N_SURFACE_SIGNALS
|
||||
};
|
||||
|
||||
@@ -146,6 +154,8 @@ meta_wayland_surface_role_get_toplevel (MetaWaylandSurfaceRole *surface_role);
|
||||
|
||||
static void
|
||||
meta_wayland_surface_role_shell_surface_configure (MetaWaylandSurfaceRoleShellSurface *shell_surface_role,
|
||||
int new_x,
|
||||
int new_y,
|
||||
int new_width,
|
||||
int new_height,
|
||||
MetaWaylandSerial *sent_serial);
|
||||
@@ -161,18 +171,92 @@ static void
|
||||
meta_wayland_surface_role_shell_surface_managed (MetaWaylandSurfaceRoleShellSurface *shell_surface_role,
|
||||
MetaWindow *window);
|
||||
|
||||
static void
|
||||
unset_param_value (GParameter *param)
|
||||
{
|
||||
g_value_unset (¶m->value);
|
||||
}
|
||||
|
||||
static GArray *
|
||||
role_assignment_valist_to_params (GType role_type,
|
||||
const char *first_property_name,
|
||||
va_list var_args)
|
||||
{
|
||||
GObjectClass *object_class;
|
||||
const char *property_name = first_property_name;
|
||||
GArray *params;
|
||||
|
||||
object_class = g_type_class_ref (role_type);
|
||||
|
||||
params = g_array_new (FALSE, FALSE, sizeof (GParameter));
|
||||
g_array_set_clear_func (params, (GDestroyNotify) unset_param_value);
|
||||
|
||||
while (property_name)
|
||||
{
|
||||
GParameter param = {
|
||||
.name = property_name,
|
||||
.value = G_VALUE_INIT
|
||||
};
|
||||
GParamSpec *pspec;
|
||||
GType ptype;
|
||||
gchar *error = NULL;
|
||||
|
||||
pspec = g_object_class_find_property (object_class,
|
||||
property_name);
|
||||
g_assert (pspec);
|
||||
|
||||
ptype = G_PARAM_SPEC_VALUE_TYPE (pspec);
|
||||
G_VALUE_COLLECT_INIT (¶m.value, ptype, var_args, 0, &error);
|
||||
g_assert (!error);
|
||||
|
||||
g_array_append_val (params, param);
|
||||
|
||||
property_name = va_arg (var_args, const char *);
|
||||
}
|
||||
|
||||
g_type_class_unref (object_class);
|
||||
|
||||
return params;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_wayland_surface_assign_role (MetaWaylandSurface *surface,
|
||||
GType role_type)
|
||||
GType role_type,
|
||||
const char *first_property_name,
|
||||
...)
|
||||
{
|
||||
va_list var_args;
|
||||
|
||||
if (!surface->role)
|
||||
{
|
||||
MetaWaylandSurfaceRolePrivate *role_priv;
|
||||
if (first_property_name)
|
||||
{
|
||||
GArray *params;
|
||||
GParameter param;
|
||||
|
||||
surface->role = g_object_new (role_type, NULL);
|
||||
role_priv =
|
||||
meta_wayland_surface_role_get_instance_private (surface->role);
|
||||
role_priv->surface = surface;
|
||||
va_start (var_args, first_property_name);
|
||||
params = role_assignment_valist_to_params (role_type,
|
||||
first_property_name,
|
||||
var_args);
|
||||
va_end (var_args);
|
||||
|
||||
param = (GParameter) {
|
||||
.name = "surface",
|
||||
.value = G_VALUE_INIT
|
||||
};
|
||||
g_value_init (¶m.value, META_TYPE_WAYLAND_SURFACE);
|
||||
g_value_set_object (¶m.value, surface);
|
||||
g_array_append_val (params, param);
|
||||
|
||||
surface->role = g_object_newv (role_type, params->len,
|
||||
(GParameter *) params->data);
|
||||
|
||||
g_array_unref (params);
|
||||
}
|
||||
else
|
||||
{
|
||||
surface->role = g_object_new (role_type, "surface", surface, NULL);
|
||||
}
|
||||
|
||||
meta_wayland_surface_role_assigned (surface->role);
|
||||
|
||||
@@ -191,6 +275,13 @@ meta_wayland_surface_assign_role (MetaWaylandSurface *surface,
|
||||
}
|
||||
else
|
||||
{
|
||||
va_start (var_args, first_property_name);
|
||||
g_object_set_valist (G_OBJECT (surface->role),
|
||||
first_property_name, var_args);
|
||||
va_end (var_args);
|
||||
|
||||
meta_wayland_surface_role_assigned (surface->role);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -362,22 +453,6 @@ queue_surface_actor_frame_callbacks (MetaWaylandSurface *surface,
|
||||
wl_list_init (&pending->frame_callback_list);
|
||||
}
|
||||
|
||||
void
|
||||
meta_wayland_surface_apply_window_state (MetaWaylandSurface *surface,
|
||||
MetaWaylandPendingState *pending)
|
||||
{
|
||||
MetaSurfaceActorWayland *actor =
|
||||
META_SURFACE_ACTOR_WAYLAND (surface->surface_actor);
|
||||
MetaWindow *window = surface->window;
|
||||
MetaWaylandBuffer *buffer = surface->buffer_ref.buffer;
|
||||
CoglTexture *texture = buffer->texture;
|
||||
double scale;
|
||||
|
||||
scale = meta_surface_actor_wayland_get_scale (actor);
|
||||
window->buffer_rect.width = cogl_texture_get_width (texture) * scale;
|
||||
window->buffer_rect.height = cogl_texture_get_height (texture) * scale;
|
||||
}
|
||||
|
||||
static void
|
||||
pending_buffer_resource_destroyed (MetaWaylandBuffer *buffer,
|
||||
MetaWaylandPendingState *pending)
|
||||
@@ -499,12 +574,15 @@ static void
|
||||
subsurface_role_commit (MetaWaylandSurfaceRole *surface_role,
|
||||
MetaWaylandPendingState *pending)
|
||||
{
|
||||
MetaWaylandSurfaceRoleClass *surface_role_class;
|
||||
MetaWaylandSurface *surface =
|
||||
meta_wayland_surface_role_get_surface (surface_role);
|
||||
MetaSurfaceActorWayland *surface_actor =
|
||||
META_SURFACE_ACTOR_WAYLAND (surface->surface_actor);
|
||||
|
||||
queue_surface_actor_frame_callbacks (surface, pending);
|
||||
surface_role_class =
|
||||
META_WAYLAND_SURFACE_ROLE_CLASS (meta_wayland_surface_role_subsurface_parent_class);
|
||||
surface_role_class->commit (surface_role, pending);
|
||||
|
||||
if (surface->buffer_ref.buffer != NULL)
|
||||
clutter_actor_show (CLUTTER_ACTOR (surface_actor));
|
||||
@@ -519,7 +597,10 @@ subsurface_role_get_toplevel (MetaWaylandSurfaceRole *surface_role)
|
||||
meta_wayland_surface_role_get_surface (surface_role);
|
||||
MetaWaylandSurface *parent = surface->sub.parent;
|
||||
|
||||
return meta_wayland_surface_role_get_toplevel (parent->role);
|
||||
if (parent->role)
|
||||
return meta_wayland_surface_role_get_toplevel (parent->role);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* A non-subsurface is always desynchronized.
|
||||
@@ -654,6 +735,14 @@ apply_pending_state (MetaWaylandSurface *surface,
|
||||
CoglTexture *texture;
|
||||
|
||||
texture = meta_wayland_buffer_ensure_texture (pending->buffer);
|
||||
if (!texture)
|
||||
{
|
||||
wl_resource_post_error (surface->resource, WL_DISPLAY_ERROR_NO_MEMORY,
|
||||
"Failed to create a texture for surface %i",
|
||||
wl_resource_get_id (surface->resource));
|
||||
|
||||
goto cleanup;
|
||||
}
|
||||
meta_surface_actor_wayland_set_texture (surface_actor_wayland,
|
||||
texture);
|
||||
}
|
||||
@@ -723,6 +812,7 @@ apply_pending_state (MetaWaylandSurface *surface,
|
||||
}
|
||||
}
|
||||
|
||||
cleanup:
|
||||
/* If we have a buffer that we are not using, decrease the use count so it may
|
||||
* be released if no-one else has a use-reference to it.
|
||||
*/
|
||||
@@ -1158,8 +1248,6 @@ wl_surface_destructor (struct wl_resource *resource)
|
||||
|
||||
if (surface->wl_subsurface)
|
||||
wl_resource_destroy (surface->wl_subsurface);
|
||||
if (surface->gtk_surface)
|
||||
wl_resource_destroy (surface->gtk_surface);
|
||||
|
||||
g_object_unref (surface);
|
||||
|
||||
@@ -1231,172 +1319,6 @@ meta_wayland_surface_begin_grab_op (MetaWaylandSurface *surface,
|
||||
x, y);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_surface_destructor (struct wl_resource *resource)
|
||||
{
|
||||
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
|
||||
|
||||
surface->gtk_surface = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_surface_set_dbus_properties (struct wl_client *client,
|
||||
struct wl_resource *resource,
|
||||
const char *application_id,
|
||||
const char *app_menu_path,
|
||||
const char *menubar_path,
|
||||
const char *window_object_path,
|
||||
const char *application_object_path,
|
||||
const char *unique_bus_name)
|
||||
{
|
||||
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
|
||||
|
||||
/* Broken client, let it die instead of us */
|
||||
if (!surface->window)
|
||||
{
|
||||
meta_warning ("meta-wayland-surface: set_dbus_properties called with invalid window!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
meta_window_set_gtk_dbus_properties (surface->window,
|
||||
application_id,
|
||||
unique_bus_name,
|
||||
app_menu_path,
|
||||
menubar_path,
|
||||
application_object_path,
|
||||
window_object_path);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_surface_set_modal (struct wl_client *client,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
|
||||
|
||||
if (surface->is_modal)
|
||||
return;
|
||||
|
||||
surface->is_modal = TRUE;
|
||||
meta_window_set_type (surface->window, META_WINDOW_MODAL_DIALOG);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_surface_unset_modal (struct wl_client *client,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
|
||||
|
||||
if (!surface->is_modal)
|
||||
return;
|
||||
|
||||
surface->is_modal = FALSE;
|
||||
meta_window_set_type (surface->window, META_WINDOW_NORMAL);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_surface_present (struct wl_client *client,
|
||||
struct wl_resource *resource,
|
||||
uint32_t timestamp)
|
||||
{
|
||||
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
|
||||
MetaWindow *window = surface->window;
|
||||
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
meta_window_activate_full (window, timestamp,
|
||||
META_CLIENT_TYPE_APPLICATION, NULL);
|
||||
}
|
||||
|
||||
static const struct gtk_surface1_interface meta_wayland_gtk_surface_interface = {
|
||||
gtk_surface_set_dbus_properties,
|
||||
gtk_surface_set_modal,
|
||||
gtk_surface_unset_modal,
|
||||
gtk_surface_present,
|
||||
};
|
||||
|
||||
static void
|
||||
gtk_shell_get_gtk_surface (struct wl_client *client,
|
||||
struct wl_resource *resource,
|
||||
guint32 id,
|
||||
struct wl_resource *surface_resource)
|
||||
{
|
||||
MetaWaylandSurface *surface = wl_resource_get_user_data (surface_resource);
|
||||
|
||||
if (surface->gtk_surface != NULL)
|
||||
{
|
||||
wl_resource_post_error (surface_resource,
|
||||
WL_DISPLAY_ERROR_INVALID_OBJECT,
|
||||
"gtk_shell::get_gtk_surface already requested");
|
||||
return;
|
||||
}
|
||||
|
||||
surface->gtk_surface = wl_resource_create (client,
|
||||
>k_surface1_interface,
|
||||
wl_resource_get_version (resource),
|
||||
id);
|
||||
wl_resource_set_implementation (surface->gtk_surface, &meta_wayland_gtk_surface_interface, surface, gtk_surface_destructor);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_shell_set_startup_id (struct wl_client *client,
|
||||
struct wl_resource *resource,
|
||||
const char *startup_id)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
display = meta_get_display ();
|
||||
meta_startup_notification_remove_sequence (display->startup_notification,
|
||||
startup_id);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_shell_system_bell (struct wl_client *client,
|
||||
struct wl_resource *resource,
|
||||
struct wl_resource *gtk_surface_resource)
|
||||
{
|
||||
MetaDisplay *display = meta_get_display ();
|
||||
|
||||
if (gtk_surface_resource)
|
||||
{
|
||||
MetaWaylandSurface *surface =
|
||||
wl_resource_get_user_data (gtk_surface_resource);
|
||||
|
||||
if (!surface->window)
|
||||
return;
|
||||
|
||||
meta_bell_notify (display, surface->window);
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_bell_notify (display, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static const struct gtk_shell1_interface meta_wayland_gtk_shell_interface = {
|
||||
gtk_shell_get_gtk_surface,
|
||||
gtk_shell_set_startup_id,
|
||||
gtk_shell_system_bell,
|
||||
};
|
||||
|
||||
static void
|
||||
bind_gtk_shell (struct wl_client *client,
|
||||
void *data,
|
||||
guint32 version,
|
||||
guint32 id)
|
||||
{
|
||||
struct wl_resource *resource;
|
||||
uint32_t capabilities = 0;
|
||||
|
||||
resource = wl_resource_create (client, >k_shell1_interface, version, id);
|
||||
wl_resource_set_implementation (resource, &meta_wayland_gtk_shell_interface, data, NULL);
|
||||
|
||||
if (!meta_prefs_get_show_fallback_app_menu ())
|
||||
capabilities = GTK_SHELL1_CAPABILITY_GLOBAL_APP_MENU;
|
||||
|
||||
gtk_shell1_send_capabilities (resource, capabilities);
|
||||
}
|
||||
|
||||
static void
|
||||
unparent_actor (MetaWaylandSurface *surface)
|
||||
{
|
||||
@@ -1597,7 +1519,8 @@ wl_subcompositor_get_subsurface (struct wl_client *client,
|
||||
}
|
||||
|
||||
if (!meta_wayland_surface_assign_role (surface,
|
||||
META_TYPE_WAYLAND_SURFACE_ROLE_SUBSURFACE))
|
||||
META_TYPE_WAYLAND_SURFACE_ROLE_SUBSURFACE,
|
||||
NULL))
|
||||
{
|
||||
/* FIXME: There is no subcompositor "role" error yet, so lets just use something
|
||||
* similar until there is.
|
||||
@@ -1646,12 +1569,7 @@ meta_wayland_shell_init (MetaWaylandCompositor *compositor)
|
||||
{
|
||||
meta_wayland_xdg_shell_init (compositor);
|
||||
meta_wayland_wl_shell_init (compositor);
|
||||
|
||||
if (wl_global_create (compositor->wayland_display,
|
||||
>k_shell1_interface,
|
||||
META_GTK_SHELL1_VERSION,
|
||||
compositor, bind_gtk_shell) == NULL)
|
||||
g_error ("Failed to register a global gtk-shell object");
|
||||
meta_wayland_gtk_shell_init (compositor);
|
||||
|
||||
if (wl_global_create (compositor->wayland_display,
|
||||
&wl_subcompositor_interface,
|
||||
@@ -1662,6 +1580,8 @@ meta_wayland_shell_init (MetaWaylandCompositor *compositor)
|
||||
|
||||
void
|
||||
meta_wayland_surface_configure_notify (MetaWaylandSurface *surface,
|
||||
int new_x,
|
||||
int new_y,
|
||||
int new_width,
|
||||
int new_height,
|
||||
MetaWaylandSerial *sent_serial)
|
||||
@@ -1669,7 +1589,10 @@ meta_wayland_surface_configure_notify (MetaWaylandSurface *surface,
|
||||
MetaWaylandSurfaceRoleShellSurface *shell_surface_role =
|
||||
META_WAYLAND_SURFACE_ROLE_SHELL_SURFACE (surface->role);
|
||||
|
||||
g_signal_emit (surface, surface_signals[SURFACE_CONFIGURE], 0);
|
||||
|
||||
meta_wayland_surface_role_shell_surface_configure (shell_surface_role,
|
||||
new_x, new_y,
|
||||
new_width, new_height,
|
||||
sent_serial);
|
||||
}
|
||||
@@ -1869,6 +1792,56 @@ meta_wayland_surface_class_init (MetaWaylandSurfaceClass *klass)
|
||||
0, NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
surface_signals[SURFACE_CONFIGURE] =
|
||||
g_signal_new ("configure",
|
||||
G_TYPE_FROM_CLASS (object_class),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0, NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
G_TYPE_NONE, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_wayland_surface_role_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MetaWaylandSurfaceRole *surface_role = META_WAYLAND_SURFACE_ROLE (object);
|
||||
MetaWaylandSurfaceRolePrivate *priv =
|
||||
meta_wayland_surface_role_get_instance_private (surface_role);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case SURFACE_ROLE_PROP_SURFACE:
|
||||
priv->surface = g_value_get_object (value);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_wayland_surface_role_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MetaWaylandSurfaceRole *surface_role = META_WAYLAND_SURFACE_ROLE (object);
|
||||
MetaWaylandSurfaceRolePrivate *priv =
|
||||
meta_wayland_surface_role_get_instance_private (surface_role);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case SURFACE_ROLE_PROP_SURFACE:
|
||||
g_value_set_object (value, priv->surface);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1879,6 +1852,20 @@ meta_wayland_surface_role_init (MetaWaylandSurfaceRole *role)
|
||||
static void
|
||||
meta_wayland_surface_role_class_init (MetaWaylandSurfaceRoleClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->set_property = meta_wayland_surface_role_set_property;
|
||||
object_class->get_property = meta_wayland_surface_role_get_property;
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
SURFACE_ROLE_PROP_SURFACE,
|
||||
g_param_spec_object ("surface",
|
||||
"MetaWaylandSurface",
|
||||
"The MetaWaylandSurface instance",
|
||||
META_TYPE_WAYLAND_SURFACE,
|
||||
G_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT_ONLY |
|
||||
G_PARAM_STATIC_STRINGS));
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1942,6 +1929,8 @@ meta_wayland_surface_role_get_surface (MetaWaylandSurfaceRole *role)
|
||||
|
||||
static void
|
||||
meta_wayland_surface_role_shell_surface_configure (MetaWaylandSurfaceRoleShellSurface *shell_surface_role,
|
||||
int new_x,
|
||||
int new_y,
|
||||
int new_width,
|
||||
int new_height,
|
||||
MetaWaylandSerial *sent_serial)
|
||||
@@ -1950,6 +1939,8 @@ meta_wayland_surface_role_shell_surface_configure (MetaWaylandSurfaceRoleShellSu
|
||||
META_WAYLAND_SURFACE_ROLE_SHELL_SURFACE_GET_CLASS (shell_surface_role);
|
||||
|
||||
shell_surface_role_class->configure (shell_surface_role,
|
||||
new_x,
|
||||
new_y,
|
||||
new_width,
|
||||
new_height,
|
||||
sent_serial);
|
||||
@@ -2020,11 +2011,16 @@ actor_surface_commit (MetaWaylandSurfaceRole *surface_role,
|
||||
{
|
||||
MetaWaylandSurface *surface =
|
||||
meta_wayland_surface_role_get_surface (surface_role);
|
||||
MetaWaylandSurface *toplevel_surface;
|
||||
|
||||
queue_surface_actor_frame_callbacks (surface, pending);
|
||||
|
||||
toplevel_surface = meta_wayland_surface_get_toplevel (surface);
|
||||
if (!toplevel_surface || !toplevel_surface->window)
|
||||
return;
|
||||
|
||||
meta_surface_actor_wayland_sync_state (
|
||||
META_SURFACE_ACTOR_WAYLAND (surface->surface_actor));
|
||||
|
||||
queue_surface_actor_frame_callbacks (surface, pending);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -2043,6 +2039,39 @@ meta_wayland_surface_role_actor_surface_class_init (MetaWaylandSurfaceRoleActorS
|
||||
surface_role_class->is_on_output = actor_surface_is_on_output;
|
||||
}
|
||||
|
||||
static void
|
||||
shell_surface_role_surface_commit (MetaWaylandSurfaceRole *surface_role,
|
||||
MetaWaylandPendingState *pending)
|
||||
{
|
||||
MetaWaylandSurface *surface =
|
||||
meta_wayland_surface_role_get_surface (surface_role);
|
||||
MetaWaylandSurfaceRoleClass *surface_role_class;
|
||||
MetaWindow *window;
|
||||
MetaWaylandBuffer *buffer;
|
||||
CoglTexture *texture;
|
||||
MetaSurfaceActorWayland *actor;
|
||||
double scale;
|
||||
|
||||
surface_role_class =
|
||||
META_WAYLAND_SURFACE_ROLE_CLASS (meta_wayland_surface_role_shell_surface_parent_class);
|
||||
surface_role_class->commit (surface_role, pending);
|
||||
|
||||
buffer = surface->buffer_ref.buffer;
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
actor = META_SURFACE_ACTOR_WAYLAND (surface->surface_actor);
|
||||
scale = meta_surface_actor_wayland_get_scale (actor);
|
||||
texture = buffer->texture;
|
||||
|
||||
window->buffer_rect.width = cogl_texture_get_width (texture) * scale;
|
||||
window->buffer_rect.height = cogl_texture_get_height (texture) * scale;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_wayland_surface_role_shell_surface_init (MetaWaylandSurfaceRoleShellSurface *role)
|
||||
{
|
||||
@@ -2051,6 +2080,10 @@ meta_wayland_surface_role_shell_surface_init (MetaWaylandSurfaceRoleShellSurface
|
||||
static void
|
||||
meta_wayland_surface_role_shell_surface_class_init (MetaWaylandSurfaceRoleShellSurfaceClass *klass)
|
||||
{
|
||||
MetaWaylandSurfaceRoleClass *surface_role_class =
|
||||
META_WAYLAND_SURFACE_ROLE_CLASS (klass);
|
||||
|
||||
surface_role_class->commit = shell_surface_role_surface_commit;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -92,6 +92,8 @@ struct _MetaWaylandSurfaceRoleShellSurfaceClass
|
||||
MetaWaylandSurfaceRoleActorSurfaceClass parent_class;
|
||||
|
||||
void (*configure) (MetaWaylandSurfaceRoleShellSurface *shell_surface_role,
|
||||
int new_x,
|
||||
int new_y,
|
||||
int new_width,
|
||||
int new_height,
|
||||
MetaWaylandSerial *sent_serial);
|
||||
@@ -174,6 +176,7 @@ struct _MetaWaylandSurface
|
||||
int32_t offset_x, offset_y;
|
||||
GList *subsurfaces;
|
||||
GHashTable *outputs_to_destroy_notify_id;
|
||||
gboolean destroying;
|
||||
|
||||
/* Buffer reference state. */
|
||||
struct {
|
||||
@@ -202,13 +205,8 @@ struct _MetaWaylandSurface
|
||||
MetaWaylandPendingState *pending;
|
||||
|
||||
/* Extension resources. */
|
||||
struct wl_resource *gtk_surface;
|
||||
struct wl_resource *wl_subsurface;
|
||||
|
||||
/* gtk_surface stuff */
|
||||
gboolean is_modal;
|
||||
gboolean destroying;
|
||||
|
||||
/* wl_subsurface stuff. */
|
||||
struct {
|
||||
MetaWaylandSurface *parent;
|
||||
@@ -243,7 +241,9 @@ MetaWaylandSurface *meta_wayland_surface_create (MetaWaylandCompositor *composit
|
||||
guint32 id);
|
||||
|
||||
gboolean meta_wayland_surface_assign_role (MetaWaylandSurface *surface,
|
||||
GType role_type);
|
||||
GType role_type,
|
||||
const char *first_property_name,
|
||||
...);
|
||||
|
||||
MetaWaylandBuffer *meta_wayland_surface_get_buffer (MetaWaylandSurface *surface);
|
||||
|
||||
@@ -255,6 +255,8 @@ void meta_wayland_surface_set_window (MetaWaylandSurface *surface
|
||||
MetaWindow *window);
|
||||
|
||||
void meta_wayland_surface_configure_notify (MetaWaylandSurface *surface,
|
||||
int new_x,
|
||||
int new_y,
|
||||
int width,
|
||||
int height,
|
||||
MetaWaylandSerial *sent_serial);
|
||||
@@ -299,9 +301,6 @@ MetaWaylandSurface * meta_wayland_surface_role_get_surface (MetaWaylandSurfaceRo
|
||||
|
||||
cairo_region_t * meta_wayland_surface_calculate_input_region (MetaWaylandSurface *surface);
|
||||
|
||||
void meta_wayland_surface_apply_window_state (MetaWaylandSurface *surface,
|
||||
MetaWaylandPendingState *pending);
|
||||
|
||||
void meta_wayland_surface_calculate_window_geometry (MetaWaylandSurface *surface,
|
||||
MetaRectangle *total_geometry,
|
||||
float parent_x,
|
||||
|
@@ -443,7 +443,8 @@ tool_set_cursor (struct wl_client *client,
|
||||
|
||||
if (surface &&
|
||||
!meta_wayland_surface_assign_role (surface,
|
||||
META_TYPE_WAYLAND_SURFACE_ROLE_TABLET_CURSOR))
|
||||
META_TYPE_WAYLAND_SURFACE_ROLE_TABLET_CURSOR,
|
||||
NULL))
|
||||
{
|
||||
wl_resource_post_error (resource, WL_POINTER_ERROR_ROLE,
|
||||
"wl_surface@%d already has a different role",
|
||||
|
@@ -518,7 +518,8 @@ wl_shell_get_shell_surface (struct wl_client *client,
|
||||
}
|
||||
|
||||
if (!meta_wayland_surface_assign_role (surface,
|
||||
META_TYPE_WAYLAND_WL_SHELL_SURFACE))
|
||||
META_TYPE_WAYLAND_WL_SHELL_SURFACE,
|
||||
NULL))
|
||||
{
|
||||
wl_resource_post_error (resource, WL_SHELL_ERROR_ROLE,
|
||||
"wl_surface@%d already has a different role",
|
||||
@@ -594,7 +595,6 @@ wl_shell_surface_role_commit (MetaWaylandSurfaceRole *surface_role,
|
||||
if (!pending->newly_attached)
|
||||
return;
|
||||
|
||||
meta_wayland_surface_apply_window_state (surface, pending);
|
||||
meta_wayland_surface_calculate_window_geometry (surface, &geom, 0, 0);
|
||||
meta_window_wayland_move_resize (window,
|
||||
NULL,
|
||||
@@ -616,6 +616,8 @@ wl_shell_surface_role_get_toplevel (MetaWaylandSurfaceRole *surface_role)
|
||||
|
||||
static void
|
||||
wl_shell_surface_role_configure (MetaWaylandSurfaceRoleShellSurface *shell_surface_role,
|
||||
int new_x,
|
||||
int new_y,
|
||||
int new_width,
|
||||
int new_height,
|
||||
MetaWaylandSerial *sent_serial)
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -23,16 +23,29 @@
|
||||
#include "wayland/meta-wayland-surface.h"
|
||||
|
||||
#define META_TYPE_WAYLAND_XDG_SURFACE (meta_wayland_xdg_surface_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (MetaWaylandXdgSurface,
|
||||
meta_wayland_xdg_surface,
|
||||
META, WAYLAND_XDG_SURFACE,
|
||||
MetaWaylandSurfaceRoleShellSurface);
|
||||
G_DECLARE_DERIVABLE_TYPE (MetaWaylandXdgSurface,
|
||||
meta_wayland_xdg_surface,
|
||||
META, WAYLAND_XDG_SURFACE,
|
||||
MetaWaylandSurfaceRoleShellSurface);
|
||||
|
||||
struct _MetaWaylandXdgSurfaceClass
|
||||
{
|
||||
MetaWaylandSurfaceRoleShellSurfaceClass parent_class;
|
||||
|
||||
void (*shell_client_destroyed) (MetaWaylandXdgSurface *xdg_surface);
|
||||
};
|
||||
|
||||
#define META_TYPE_WAYLAND_XDG_TOPLEVEL (meta_wayland_xdg_toplevel_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (MetaWaylandXdgToplevel,
|
||||
meta_wayland_xdg_toplevel,
|
||||
META, WAYLAND_XDG_TOPLEVEL,
|
||||
MetaWaylandXdgSurface);
|
||||
|
||||
#define META_TYPE_WAYLAND_XDG_POPUP (meta_wayland_xdg_popup_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (MetaWaylandXdgPopup,
|
||||
meta_wayland_xdg_popup,
|
||||
META, WAYLAND_XDG_POPUP,
|
||||
MetaWaylandSurfaceRoleShellSurface);
|
||||
MetaWaylandXdgSurface);
|
||||
|
||||
void meta_wayland_xdg_shell_init (MetaWaylandCompositor *compositor);
|
||||
|
||||
|
@@ -46,6 +46,8 @@ struct _MetaWindowWayland
|
||||
int pending_move_x;
|
||||
int pending_move_y;
|
||||
|
||||
int last_sent_x;
|
||||
int last_sent_y;
|
||||
int last_sent_width;
|
||||
int last_sent_height;
|
||||
};
|
||||
@@ -149,6 +151,8 @@ surface_state_changed (MetaWindow *window)
|
||||
return;
|
||||
|
||||
meta_wayland_surface_configure_notify (window->surface,
|
||||
wl_window->last_sent_x,
|
||||
wl_window->last_sent_y,
|
||||
wl_window->last_sent_width,
|
||||
wl_window->last_sent_height,
|
||||
&wl_window->pending_configure_serial);
|
||||
@@ -184,6 +188,8 @@ meta_window_wayland_move_resize_internal (MetaWindow *window,
|
||||
{
|
||||
MetaWindowWayland *wl_window = META_WINDOW_WAYLAND (window);
|
||||
gboolean can_move_now;
|
||||
int configured_x;
|
||||
int configured_y;
|
||||
int configured_width;
|
||||
int configured_height;
|
||||
int monitor_scale;
|
||||
@@ -194,6 +200,9 @@ meta_window_wayland_move_resize_internal (MetaWindow *window,
|
||||
if (window->unmanaging)
|
||||
return;
|
||||
|
||||
configured_x = constrained_rect.x;
|
||||
configured_y = constrained_rect.y;
|
||||
|
||||
/* The scale the window is drawn in might change depending on what monitor it
|
||||
* is mainly on. Scale the configured rectangle to be in logical pixel
|
||||
* coordinate space so that we can have a scale independent size to pass
|
||||
@@ -256,6 +265,8 @@ meta_window_wayland_move_resize_internal (MetaWindow *window,
|
||||
return;
|
||||
|
||||
meta_wayland_surface_configure_notify (window->surface,
|
||||
configured_x,
|
||||
configured_y,
|
||||
configured_width,
|
||||
configured_height,
|
||||
&wl_window->pending_configure_serial);
|
||||
@@ -271,6 +282,8 @@ meta_window_wayland_move_resize_internal (MetaWindow *window,
|
||||
}
|
||||
}
|
||||
|
||||
wl_window->last_sent_x = configured_x;
|
||||
wl_window->last_sent_y = configured_y;
|
||||
wl_window->last_sent_width = configured_width;
|
||||
wl_window->last_sent_height = configured_height;
|
||||
|
||||
@@ -624,3 +637,16 @@ meta_window_wayland_place_relative_to (MetaWindow *window,
|
||||
other->buffer_rect.y + (y * monitor_scale));
|
||||
window->placed = TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_place_with_placement_rule (MetaWindow *window,
|
||||
MetaPlacementRule *placement_rule)
|
||||
{
|
||||
g_clear_pointer (&window->placement_rule, g_free);
|
||||
window->placement_rule = g_new0 (MetaPlacementRule, 1);
|
||||
*window->placement_rule = *placement_rule;
|
||||
|
||||
window->unconstrained_rect.width = placement_rule->width;
|
||||
window->unconstrained_rect.height = placement_rule->height;
|
||||
meta_window_force_placement (window);
|
||||
}
|
||||
|
@@ -25,6 +25,7 @@
|
||||
#ifndef META_WINDOW_WAYLAND_H
|
||||
#define META_WINDOW_WAYLAND_H
|
||||
|
||||
#include "core/window-private.h"
|
||||
#include <meta/window.h>
|
||||
#include "wayland/meta-wayland-types.h"
|
||||
|
||||
@@ -57,4 +58,7 @@ void meta_window_wayland_place_relative_to (MetaWindow *window,
|
||||
int x,
|
||||
int y);
|
||||
|
||||
void meta_window_place_with_placement_rule (MetaWindow *window,
|
||||
MetaPlacementRule *placement_rule);
|
||||
|
||||
#endif
|
||||
|
@@ -56,7 +56,8 @@ associate_window_with_surface (MetaWindow *window,
|
||||
MetaDisplay *display = window->display;
|
||||
|
||||
if (!meta_wayland_surface_assign_role (surface,
|
||||
META_TYPE_WAYLAND_SURFACE_ROLE_XWAYLAND))
|
||||
META_TYPE_WAYLAND_SURFACE_ROLE_XWAYLAND,
|
||||
NULL))
|
||||
{
|
||||
wl_resource_post_error (surface->resource,
|
||||
WL_DISPLAY_ERROR_INVALID_OBJECT,
|
||||
|
@@ -46,6 +46,16 @@
|
||||
<request name="present">
|
||||
<arg name="time" type="uint"/>
|
||||
</request>
|
||||
|
||||
<!-- Version 2 additions -->
|
||||
|
||||
<enum name="state">
|
||||
<entry name="tiled" value="1"/>
|
||||
</enum>
|
||||
|
||||
<event name="configure">
|
||||
<arg name="states" type="array"/>
|
||||
</event>
|
||||
</interface>
|
||||
|
||||
</protocol>
|
||||
|
Reference in New Issue
Block a user