Compare commits

...

227 Commits

Author SHA1 Message Date
2d02f6cc78 display: Unset grab_frame_action in meta_display_end_grab_op
Otherwise, if the user had moved the windows around using a mouse,
they can not be moved beyond the top edge of the primary monitor when
the tray needs to be brought up, . This is because
constrain_titlebar_visible looks at grab_frame_action and thinks that
the movement is being caused by the user trying to move the windows up
by grabbing the frame.

Fixes: https://bugzilla.gnome.org/677215
2012-07-18 17:06:43 +02:00
b5d5934e5a Updated Traditional Chinese translation(Hong Kong and Taiwan) 2012-07-17 15:17:42 +08:00
64b1c0f953 Bump version to 3.5.4
Update NEWS
2012-07-16 23:23:50 +02:00
10d53fc7d2 window: Do not restore tiling on unmaximize
When we consider tiling a special case of maximization, it makes
more sense to always unmaximize to the normal state rather than
restoring a previous tile state.

https://bugzilla.gnome.org/show_bug.cgi?id=677565
2012-07-16 22:18:47 +02:00
eb1292ea99 window: Handle changes of the attach-modal-dialogs preference
Currently we decide whether a modal dialog should be attached or not
when mapping it, i.e. we don't pick up preference changes that happen
while the dialog is up. It's not really a big deal given that modal
dialogs are usually transitory, but it's easy enough to add a bit of
extra polish ...

https://bugzilla.gnome.org/show_bug.cgi?id=679904
2012-07-16 22:15:13 +02:00
e257580b94 workspace: Respect the not_this_one parameter passed in
In the case of focus-follows-mouse, we need to ensure that we
do not select a certain window after closing another one.

https://bugzilla.gnome.org/show_bug.cgi?id=675982
2012-07-16 15:21:54 -04:00
42261156ec Updated Spanish translation 2012-07-16 16:45:58 +02:00
89e31f0d9d Assamese translation updated 2012-07-16 12:58:48 +05:30
c805e397fd Updated Belarusian translation. 2012-07-15 11:35:32 +03:00
760a36aeee Reduce amount of markup in translated messages
Markup in messages is fragile and tends to break in translations.
This patch reduces the amount of markup as far as possible.

https://bugzilla.gnome.org/show_bug.cgi?id=679660
2012-07-14 20:48:29 -04:00
5d57a2594d constraints: Remove unused variable 2012-07-14 15:03:54 +02:00
1a5132d391 shadow-factory: Don't use a top-fade on attached modals
https://bugzilla.gnome.org/show_bug.cgi?id=674499
2012-07-14 03:30:56 +02:00
0fe0534c85 constraints: Center modal dialogs on their parent
... rather than attaching them to the parent's title bar.

https://bugzilla.gnome.org/show_bug.cgi?id=674499
2012-07-14 03:30:56 +02:00
fe942049da Assamese translation reviewed 2012-07-13 15:03:11 +05:30
e6ed29f0e2 keybindings: Use G_DEFINE_BOXED_TYPE
https://bugzilla.gnome.org/show_bug.cgi?id=673824
2012-07-13 00:00:42 -04:00
15f11f879d Updated Hebrew translation. 2012-07-10 22:44:18 +03:00
f517eaf81e Updated Norwegian bokmål translation 2012-07-10 07:58:09 +02:00
255347f876 constraints: fix mem leak in meta_window_constrain()
MetaFrameBorders leaked when orig_borders != NULL and
window->fullscreen == TRUE

https://bugzilla.gnome.org/show_bug.cgi?id=679153
2012-07-08 11:56:31 -04:00
e4ae7d7b1b *BSD build fix: Include sys/wait.h as described in POSIX specs 2012-07-08 17:47:24 +02:00
2be943d1d9 Updated Bulgarian translation 2012-07-04 07:13:31 +03:00
0a50488bef window: Also use hide-titlebar-when-maximized when tiled
Side-by-side tiling is conceptually very close to maximization
("half-maximized"), so it makes sense to also hide the titlebar
in this state if requested by the application.

https://bugzilla.gnome.org/show_bug.cgi?id=679290
2012-07-03 12:21:54 +02:00
78c966321a prefs: add get_/set_ignore_request_hide_titlebar ()
Enables the possibility to ignore GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED
to prevent hiding the titlebar of applications even if they
requested so.

https://bugzilla.gnome.org/show_bug.cgi?id=678947
2012-07-01 19:25:08 +02:00
f65b7c59d3 Make it possible to reimplement move-to-workspace keybindings from plugins
Export the necessary functions so that a plugin that wishes to do
so can reimplement those keybindings without loss of functionality.

https://bugzilla.gnome.org/show_bug.cgi?id=674104
2012-06-25 23:11:24 +02:00
e31f55e146 Make meta_workspace_get_neighbor() public
There is no need for this function to be private, and it can
greatly simplify gnome-shell code handling workspace switch.

https://bugzilla.gnome.org/show_bug.cgi?id=674104
2012-06-25 23:07:19 +02:00
dc232b6cad Bump version to 3.5.3
Update NEWS
2012-06-25 22:38:25 +02:00
a2f2e07e9b meta-window-actor: Fix a potential crash in the window shaping code
There was a potential case where we were trying to use uninitialized memory,
in the case where the X server threw an error during XShapeGetRectangles.
In this case, we need to use the implicit shape for the window, which means
we need to rearrange code flow to make it work.

https://bugzilla.gnome.org/show_bug.cgi?id=677977
2012-06-25 14:07:35 -04:00
f5e48223c9 meta-plugin-manager: Guard against a NULL start vfunc
The default plugin has no such vfunc.

https://bugzilla.gnome.org/show_bug.cgi?id=678238
2012-06-25 13:52:47 -04:00
1478510392 mutter: Use the default plugin by default
https://bugzilla.gnome.org/show_bug.cgi?id=678238
2012-06-25 13:52:47 -04:00
18b38320a6 window: Make some window methods public
There's no reason they aren't, right now. Extensions should be able
to use these.

https://bugzilla.gnome.org/show_bug.cgi?id=678126
2012-06-25 13:52:47 -04:00
16be31b514 Updated Galician translations 2012-06-25 00:09:24 +02:00
accc183474 prefs: remove some obsolete header definitions 2012-06-18 11:54:22 +02:00
81699619e8 Updated French translation 2012-06-15 20:22:33 +02:00
75c87e5876 Updated Arabic translation 2012-06-13 20:20:42 +02:00
50bc4ad0e1 Fix bad declarations
meta_screen_get_current_monitor now returns an integer, not a pointer.
2012-06-11 10:13:43 -04:00
277e8bdad9 core: Fix meta_screen_get_current_monitor
fixes 4595209346

We're supposed to return an index from here now, no longer a pointer
to the current monitor.

Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
2012-06-11 10:53:21 +02:00
dc50ccf9b7 frames: Add a multiplier to increase the size of resize corners
Now the resize corners will extend into the actual border edges.

https://bugzilla.gnome.org/show_bug.cgi?id=677669
2012-06-08 23:09:32 -04:00
4595209346 screen: Add new public meta_screen_get_current_monitor API
Similar to meta_screen_get_primary_monitor, this returns a monitor index.
The monitor that the pointer is on. The previous private implementation
has been renamed to meta_screen_get_current_monitor_info.

https://bugzilla.gnome.org/show_bug.cgi?id=642591
2012-06-08 23:06:46 -04:00
50cf3dd1a5 main: Support -r as the equivalent of --replace
https://bugzilla.gnome.org/show_bug.cgi?id=676857
2012-06-08 17:33:37 -04:00
66eac7824a meta-window-actor: Don't unredirect shaped windows
If a window has its BoundingRegion shaped, we shouldn't unredirect it,
as it expects the rest of the windows from being shown under it. This
prevents applications like the Skype screen recorder or gtkRecordMyDesktop
which want to show a "border" around the recorded area from being
unredirected, giving the appearance of making the desktop freeze.

https://bugzilla.gnome.org/show_bug.cgi?id=677657
2012-06-08 16:48:43 -04:00
4041f96ed3 meta-window-actor: Refactor should_unredirect a bit more
"Flat is better than nested"

https://bugzilla.gnome.org/show_bug.cgi?id=677657
2012-06-08 16:48:42 -04:00
3a15d637da Updated Slovenian translation 2012-06-08 21:30:07 +02:00
5c3c7df948 Updated Spanish translation 2012-06-06 13:44:02 +02:00
f9454e29db meta-plugin-manager: Only allow one plugin to be loaded
The "multiple plugins loaded at once" strategy was always a big fiction:
while it may be viable if you're super careful, it's fragile and requires
a bit of infrastructure that we would be better off without.

Note that for simplicity, we're keeping the MetaPluginManager, but it only
manages one plugin. A possible future cleanup would be to remove it entirely.

https://bugzilla.gnome.org/show_bug.cgi?id=676855
2012-06-05 13:28:23 -04:00
574c0c3287 meta-plugin: Remove "disabled" feature
It's just code cruft that nobody's using

https://bugzilla.gnome.org/show_bug.cgi?id=676855
2012-06-05 13:28:23 -04:00
9fa5aa9889 meta-plugin: Kill off "features"
We already check that the plugin has the appropriate vfunc in the klass
structure, so we shouldn't need to check for the same data again with
a "features" long.

https://bugzilla.gnome.org/show_bug.cgi?id=676855
2012-06-05 13:28:23 -04:00
80a70a4ad1 mutter: Only allow one plugin to be loaded
https://bugzilla.gnome.org/show_bug.cgi?id=676855
2012-06-05 13:28:23 -04:00
7c1b734053 meta-plugin: Remove some cruft
https://bugzilla.gnome.org/show_bug.cgi?id=676855
2012-06-05 13:28:23 -04:00
33e1017403 main: Don't call g_type_init from meta_init
For the plugin system, GType has to have been initialized by now.

https://bugzilla.gnome.org/show_bug.cgi?id=676855
2012-06-05 13:28:23 -04:00
f143fe3710 util: Don't generate a backtrace on every G_LOG
We may not show the backtrace, but it's prohibitly expensive to generate,
so don't. If someone wants a backtrace they can use the appropriate G_DEBUG
environment variable plus GDB.

https://bugzilla.gnome.org/show_bug.cgi?id=676855
2012-06-05 13:28:22 -04:00
66406b3035 Bump version to 3.5.2
Update NEWS
2012-06-05 19:00:28 +02:00
042ddc5637 workspace: add annotation for meta_workspace_get_work_area_all_monitors 2012-05-31 19:17:49 +02:00
5b04ab4473 Updated Spanish translation 2012-05-31 15:29:44 +02:00
16b86ae7f7 Updated Spanish translation 2012-05-31 14:15:54 +02:00
49400657ca stack: Ignore keep-on-top property on maximized windows
It is impossible to switch to other windows when keep-on-top is set
for maximized windows; given that keep-on-top is only ever useful
to keep a window visible while focusing a different window, the
current behavior is pointless. So ignore keep-on-top while a window
is maximized.

https://bugzilla.gnome.org/show_bug.cgi?id=673581
2012-05-30 15:01:57 +02:00
30bc8bc6ce window-actor: Add a debugging tool to write a region to a PNG
Just a helper function that I keep rewriting all over the place.

https://bugzilla.gnome.org/show_bug.cgi?id=676052
2012-05-25 17:31:06 -04:00
ac18f41ed1 window-actor: Use MetaRegionBuilder when scanning the visible region
This gives a pretty solid performance improvement when resizing windows.
2012-05-25 17:31:06 -04:00
60c05a0dac window-actor: Add back antialiased window corners
This simply adds fancy arcs to the mask texture. It's still not painted
with GTK+ yet.

https://bugzilla.gnome.org/show_bug.cgi?id=676052
2012-05-25 17:31:05 -04:00
c47de98c88 window-actor: Paint the shape region with cairo
https://bugzilla.gnome.org/show_bug.cgi?id=676052
2012-05-21 16:12:30 -04:00
f1aada0fae window-actor: Punt mask generation to MetaWindowActor
This effectively makes MetaShapedTexture not a MetaShapedTexture, but a simple
and dumb MetaMaskedTexture, with an optimization for clipped regions.

We're doing this as the mask may need to be more complicated than made of
a cairo path -- we eventually want GTK+ to draw the entire frame background,
which we'll then scan.

https://bugzilla.gnome.org/show_bug.cgi?id=676052
2012-05-21 16:12:30 -04:00
4de492eb20 shaped-texture: Remove the cairo overlay (and rounded corners)
As we want GTK+ to paint the mask on an A8, we can't simply use a cairo
path. A later commit will make this into a simple masked texture, and
meta-window-actor will be in control of the mask.

https://bugzilla.gnome.org/show_bug.cgi?id=676052
2012-05-21 16:12:30 -04:00
9ca00d5cce window-actor: Remove an unnecessary frame check
meta_frame_calc_borders will zero out the borders if we don't have a frame.

https://bugzilla.gnome.org/show_bug.cgi?id=676052
2012-05-21 16:12:30 -04:00
b98e4e37ad theme: Make meta_frame_style_draw_with_style static
https://bugzilla.gnome.org/show_bug.cgi?id=676052
2012-05-21 16:12:30 -04:00
8b64a951c9 theme: Make meta_frame_layout_calc_geometry static
https://bugzilla.gnome.org/show_bug.cgi?id=676052
2012-05-21 16:12:30 -04:00
c2a0719e44 preview-widget: Remove meta_preview_get_clip_region
The concept of a clip region doesn't make sense now that we have anti-aliased
corners and a full alpha channel. Once the theme transition is complete,
creating a preview image with an alpha channel will be possible by passing
an ARGB surface to gtk_widget_draw(preview_widget, ...);

https://bugzilla.gnome.org/show_bug.cgi?id=676052
2012-05-21 16:12:30 -04:00
8cb7a450ae screen: Remove more unused private API
These queued redraws, which is a problem when we want to know exactly
what changed when we redraw, so we do minimal effort. We're eventually
going to replace the queue_redraw API with something a lot better, so
let's just get these out of the way now.

https://bugzilla.gnome.org/show_bug.cgi?id=676052
2012-05-21 16:11:16 -04:00
6fb857cb23 frames: Remove frame border pixel caching and related optimizations
Since we now cache windows in the X server, we don't really need to cache
them here. Since we are redirecting windows in most cases, we're not gaining
anything except added memory usage. Additionally, remove the clip to screen
optimization - if a window is partially off-screen, we still need to draw
the entire thing as redirection means we won't get an expose event for it.

Additionally, when introducing invisible borders, something accidentally
slipped through: we were getting expose events on the invisible borders,
and they weren't in the cached pixels rect, so we were painting the theme
for them, even if we didn't actually paint anything with cairo. Make sure
to clip out the invisible borders instead of just the client rect so that
we don't draw if our expose event is on the invisible borders.

https://bugzilla.gnome.org/show_bug.cgi?id=675111
2012-05-21 12:51:32 -04:00
fc87a635b2 frames: Remove expose_delayed
This was introduced for the effects API and wireframe mode, and was
forgotten when that went the way of the dinosaur.

https://bugzilla.gnome.org/show_bug.cgi?id=671104
2012-05-14 15:44:49 -03:00
81930ca76e theme-parser: Look for themes in XDG_USER_DATA_DIR, not in ~/.themes
https://bugzilla.gnome.org/show_bug.cgi?id=675316
2012-05-14 14:25:55 -03:00
da65738901 theme-parser: Don't load themes from our source tree
There aren't any mutter themes in the source tree. You're better off
using jhbuild with gnome-themes-standard.

https://bugzilla.gnome.org/show_bug.cgi?id=675316
2012-05-14 14:25:55 -03:00
4528e1216a l10n: updated Italian translaion 2012-05-09 11:35:16 +02:00
d56ecde39b Updated Telugu Translation 2012-05-07 00:13:59 +05:30
4148a5cc6a Fix introspection gir metadata
The EXPORT_PACKAGES variable to the GIR makefile should be the
packages needed to use this gir. It's also unnecessary to set PACKAGES
(which is just used for CFLAGS at scan-time) since CFLAGS is already
pulls in all necessary CFLAGS.

https://bugzilla.gnome.org/show_bug.cgi?id=671092
2012-05-02 14:13:48 -04:00
8a6a568aca meta_stack_tracker_free(): fix memory leak
https://bugzilla.gnome.org/show_bug.cgi?id=672640
2012-05-02 14:03:56 -04:00
12cc0cee29 display: correctly init and free hostname
==31043== 7 bytes in 1 blocks are definitely lost in loss record 213 of 6,861
==31043==    at 0x402B018: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==31043==    by 0x417789A: ??? (in /usr/lib/libglib-2.0.so.0.3122.0)
==31043==    by 0x4177C42: g_malloc (in /usr/lib/libglib-2.0.so.0.3122.0)
==31043==    by 0x418DC3A: g_strdup (in /usr/lib/libglib-2.0.so.0.3122.0)
==31043==    by 0x408C470: meta_display_open (display.c:475)
==31043==    by 0x40A4D42: meta_run (main.c:552)
==31043==    by 0x8048A74: main (mutter.c:96)

https://bugzilla.gnome.org/show_bug.cgi?id=672640
2012-05-02 14:03:34 -04:00
878b1012b4 window-actor: Another simple clang warning fix
If we explicitly check for a NULL pointer, clang will assume
that the pointer may be NULL at some point. We clearly rely
on the pointer being non-NULL earlier, so fix this guy up.

https://bugzilla.gnome.org/show_bug.cgi?id=674876
2012-05-01 18:25:33 -04:00
a78fec7951 window: Remove setting of an unused variable
Well, technically it's used, but only in one block, so let's
just make it scoped to that block.

https://bugzilla.gnome.org/show_bug.cgi?id=674876
2012-05-01 18:21:17 -04:00
a24c512caa boxes: Remove an unnecessary assignment
https://bugzilla.gnome.org/show_bug.cgi?id=674876
2012-05-01 18:21:17 -04:00
c669a3892e meta_window_move_frame(): fix crash when frame is NULL
When meta_frame_calc_borders() was made to take a NULL frame argument,
a crash was accidentally introduced into meta_window_move_frame().

This partially reverts 8c1b2d5.

https://bugzilla.gnome.org/show_bug.cgi?id=675254
2012-05-01 13:44:35 -04:00
ba4f008d40 meta_window_actor_has_shadow: remove verbosity
meta_window_actor_has_shadow() is called for every paint for every
window, verbosely logging in it makes the output of MUTTER_VERBOSE
pretty much useless.
2012-05-01 11:37:23 -04:00
b0a099935b frames: Remove forgotten references to tooltips
Tooltips were removed a little while back, but two historical artifacts
were untouched. We're not in the museum business, now are we...
2012-04-30 16:36:18 -04:00
aba39ef953 Updated Telugu Translation 2012-04-30 11:00:28 +05:30
ebf8c460e1 default plugin: Remove start method that does nothing
All animations use the constants directly, so this is just declaring
a bunch of local variables and then doing nothing with it.

Another clang warning.

https://bugzilla.gnome.org/show_bug.cgi?id=674876
2012-04-26 15:07:46 -04:00
25d3432eee window-group: Remove an unnecessary assignment
Clang warns about this.

https://bugzilla.gnome.org/show_bug.cgi?id=674876
2012-04-26 15:07:46 -04:00
cd7a74fbcd texture-tower: Remove potential leak
The expression in here does not match the one where we malloc the
data.

https://bugzilla.gnome.org/show_bug.cgi?id=674876
2012-04-26 10:02:41 -04:00
c64188c67f core/window.c: Remove unused unmap_frame() function 2012-04-26 11:54:31 +01:00
4c2371f2e7 Revert "core/window.c: Remove unused function"
This reverts commit ff6c31dcc0.
2012-04-26 11:54:12 +01:00
ff6c31dcc0 core/window.c: Remove unused function 2012-04-26 11:29:24 +01:00
1b649c18ed Remove live-hidden-windows from mutter-schemas.convert
The preference no longer exists.
2012-04-26 02:37:34 -04:00
93037e4c6b Make support for "XFree86" Xinerama mandatory
Require the headers for "XFree86" Xinerama to be present at compile
time. The older "Solaris" Xinerama is only needed for versions of
Solaris where Mutter is unlikely to work. Solaris 10 and 11 include
the XFree86 Xinerama libraries, and apparently that's the only version
that will actually work for Solaris 11, which uses Xorg.

https://bugzilla.gnome.org/show_bug.cgi?id=674727
2012-04-25 14:37:32 -04:00
ed358c8f4b meta-texture-rectangle: Use Cogl's API to create a rectangle texture
Cogl now has public experimental API to create a rectangle texture
which we can use instead of creating a foreign texture with GL. This
avoids Mutter depending on Cogl including a GL header from its public
headers which it might not do in future.

https://bugzilla.gnome.org/show_bug.cgi?id=672711
2012-04-25 14:54:09 +01:00
a22859a64a shaped-texture: never slice shape mask texture
Since Cogl doesn't support multi-texturing with sliced textures and the
shape texture is combined with the texture-from-pixmap texture we need
to make sure we never construct a sliced mask texture. This patch simply
passes the COGL_TEXTURE_NO_SLICE flag to cogl_texture_from_data when
creating the shape mask texture.

https://bugzilla.gnome.org/show_bug.cgi?id=674731
2012-04-25 11:57:33 +01:00
c44438b19f Revert "Remove a bunch of dead code"
This reverts commit 0d794f28f0.

I thought this was marked ACN. It wasn't.
2012-04-24 18:02:33 -04:00
b58366d3ad theme: Remove unused "widget" parameter to frame style drawing
It seems that the only usage of the "widget" parameter throughout
the entire call chain was to pass between two function calls as
mutual recursion.

https://bugzilla.gnome.org/show_bug.cgi?id=671104
2012-04-24 16:54:49 -04:00
6900128b2f theme: Remove unused entry points
meta_draw_op_draw, meta_draw_op_list_draw, and meta_frame_style_draw were
all unused

https://bugzilla.gnome.org/show_bug.cgi?id=671104
2012-04-24 16:54:49 -04:00
c0b4d68390 meta-window-actor: Remove some unused constants
https://bugzilla.gnome.org/show_bug.cgi?id=671104
2012-04-24 16:54:49 -04:00
0d794f28f0 Remove a bunch of dead code
Code isn't version control. We don't need bug links and commented out
code to remind us of how things were done originally.

https://bugzilla.gnome.org/show_bug.cgi?id=671104
2012-04-24 16:54:49 -04:00
e389eff79d Remove meta_compositor_update_workspace_geometry
This callback is just dead code

https://bugzilla.gnome.org/show_bug.cgi?id=671104
2012-04-24 16:54:49 -04:00
41adbdda12 prefs: Remove a dead declaration
https://bugzilla.gnome.org/show_bug.cgi?id=671104
2012-04-24 16:41:04 -04:00
2d6555ca4d prefs: Remove live-hidden-windows preference
The preference existed, even though it was hard-coded to true. Just
remove it for good.

https://bugzilla.gnome.org/show_bug.cgi?id=671104
2012-04-24 16:40:47 -04:00
044d58951e Switch to gtk-doc syntax
https://bugzilla.gnome.org/show_bug.cgi?id=673752
2012-04-24 15:20:39 -04:00
9c97e8999e keybindings: Remove 'toggle-recording' binding
The keybinding is only useful when using GNOME Shell, so now that we
can define keybindings outside of mutter, move it there.

https://bugzilla.gnome.org/show_bug.cgi?id=674376
2012-04-24 17:36:46 +02:00
e97b38b38e Bump version to 3.4.1
Update NEWS
2012-04-17 17:58:59 -04:00
8809673a74 display: Cancel overlay key presses on mouse button events
Currently pressing the overlay key only triggers the overview if
no other key is pressed between KeyPress and KeyRelease. Extend
this logic to pointer events, so that KeyPress + ButtonPress actions
are treated explicitly different from "pure" overlay key presses.
In particular, this change allows to re-use the overlay key as mouse
button modifier.

https://bugzilla.gnome.org/show_bug.cgi?id=662476
2012-04-17 23:53:36 +02:00
68321d9bf4 keybindings: Use a GSettings object rather than a schema, to support extensions
If we want to support keybindings from extensions installed in the user's
directory, we can't take a schema, as the GSettings object needs to have
a special GSettingsSchemaSource.

https://bugzilla.gnome.org/show_bug.cgi?id=673014
2012-04-16 20:31:45 -04:00
65390e50a4 update Simplified Chinese (zh_CN) translation 2012-04-16 15:21:40 +08:00
f8d32661b5 Updated German translation 2012-04-15 17:55:13 +02:00
d84911fdf9 [l10n] Update Japanese translation 2012-04-14 12:24:08 +09:00
4147ea4660 [l10n]Updated Catalan (Valencian) translation 2012-04-10 21:09:06 +02:00
2dd7c98641 [l10n] Fixes on Catalan translation 2012-04-10 21:09:01 +02:00
3aad30143c default plugin: use the right type for varargs
Coordinates in Clutter are double, so twice the size of an int, and
if not correctly casted memory corruption occurs.

https://bugzilla.gnome.org/show_bug.cgi?id=673809
2012-04-10 03:45:25 +02:00
93d06d4368 Don't try to auto-maximize not-maximizable windows
Starting the auto-maximize process on a window like a
META_WINDOW_DESKTOP window that is not maximizable gets placement into
a confused state and eventually results in the window being positioned
at the wrong position (the position that an auto-maximized window would
be restored to.)

https://bugzilla.gnome.org/show_bug.cgi?id=673566
2012-04-05 14:53:11 -04:00
b19c061db5 Updated Kannada Translation 2012-04-03 15:43:40 +05:30
497258f6e5 Updated Kannada Translation 2012-04-02 14:43:08 +05:30
977e6388ad Updated Esperanto translation 2012-04-01 17:37:37 +02:00
0879cf0d8d Updated Persian Translations 2012-04-01 00:10:27 +04:30
4aab7fb7b9 Updated Arabic translation 2012-03-30 05:25:06 +02:00
839fee19ef Updated Lithuanian translation 2012-03-26 23:35:29 +03:00
46a56bafbd Bump version to 3.4.0
Update NEWS
2012-03-26 14:23:20 -04:00
c8b4939c7e Fix uninstalling default.so
We need a clean uninstall for 'make distcheck' to pass; libtool
hijinks leave a left-over plugins/default.so - remove it manually.
2012-03-26 14:23:19 -04:00
fc3e82421a Updated Korean translation 2012-03-27 01:26:09 +09:00
23046f6e28 stack: Fix crash when opening a full-screen window
When mutter recognizes a full-screen window, it tries to raise it to the top
of the stack. Unfortunately, a recent rewrite of the stack code didn't do
well with raising a window to the top of the stack if the stack wasn't in
a consistent state -- it would crash. Ensure that the stack is in a consistent
state at the top of meta_stack_raise/meta_stack_lower.

https://bugzilla.redhat.com/show_bug.cgi?id=806437

https://bugzilla.gnome.org/show_bug.cgi?id=672797
2012-03-26 08:15:21 -03:00
823208120d Updated Gujarati Translations 2012-03-26 14:08:50 +05:30
d12c507b12 Updated Czech translation 2012-03-26 02:24:42 +02:00
2157c238b6 Updated Czech translation 2012-03-25 22:11:19 +02:00
423bda908e meta_display_get_tab_list(): Fix leaked GSList
https://bugzilla.gnome.org/show_bug.cgi?id=672640
2012-03-24 19:30:00 +01:00
98d427ddba meta_stack_update_window_tile_matches(): Fix leaked GList
https://bugzilla.gnome.org/show_bug.cgi?id=672640
2012-03-24 19:19:17 +01:00
7a35579c3f Updated Hebrew translation. 2012-03-24 19:08:23 +02:00
adc89fbb2c Updated French translation 2012-03-24 12:51:37 +01:00
a6ca3f768f [l10n]Updated Turkish translation 2012-03-23 23:01:08 +02:00
9362fbdcde Updated Vietnamese translation 2012-03-22 10:45:51 +07:00
47099f4a87 po/vi: import from Damned Lies 2012-03-22 10:44:46 +07:00
2e6e5b068c Updated Russian translation 2012-03-21 22:26:24 +04:00
ee840bc832 Updated Brazilian Portuguese translation 2012-03-21 14:54:09 -03:00
6333c174dc Bump version to 3.3.92
Update NEWS
2012-03-20 17:10:09 -04:00
a3bf9b01aa workspace: Don't try to use per-workspace MRU lists as a hint for focusing
Commit 2fc880db switched from focusing the topmost window as the default
window to focusing the MRU window. This was done in alignment with the
introduction of per-workspace MRU lists to avoid problems where the window
stack was inadvertently changed when focusing windows during window switches.

Now that focusing windows don't have as big an impact on the stacking order,
we can revert back to focusing the top window, which is less confusing to the
user.

For now, leave per-workspace MRU lists, as they're a pretty good approximation
of a global MRU list, and it works well enough.

https://bugzilla.gnome.org/show_bug.cgi?id=620744
2012-03-20 17:08:34 -04:00
402b477458 stack: Make meta_window_raise() and meta_window_lower() smarter
https://bugzilla.gnome.org/show_bug.cgi?id=620744
2012-03-20 17:08:34 -04:00
6b273ca713 Update Simplified Chinese translation. 2012-03-20 17:11:08 +00:00
c3ec6b34a3 Updated Traditional Chinese translation(Hong Kong and Taiwan) 2012-03-19 23:55:13 +08:00
78dc480e86 screen: don't use unreffed pointer 2012-03-19 14:58:32 +00:00
53364f986c Updated Danish translation 2012-03-19 09:54:01 +01:00
5770b5b3c3 util: Quit early once we've found and removed a later
This prevents an invalid read and also improves performance slightly.

https://bugzilla.gnome.org/show_bug.cgi?id=672374
2012-03-19 02:00:03 -04:00
f16f47bd38 Revert "window: Stop a gcc warning"
This reverts commit 335d211204 trying
not to trigger the uninitialized variable warning in gcc.
2012-03-19 00:32:34 +01:00
58a57185b7 Uploaded Ukranian 2012-03-18 17:42:15 +02:00
8fb361cb26 Add META_TAB_LIST_NORMAL_ALL to MetaTabList enum
This is a new value, not associated with any keybindings, useful
when the WM needs to order the applications by last-interaction,
taking into account all windows.

https://bugzilla.gnome.org/show_bug.cgi?id=667552
2012-03-18 14:52:12 +01:00
335d211204 window: Stop a gcc warning
"warning: 'match_tile_mode' may be used uninitialized in this function", it
complains. It thinks it's not unused because of other values of
window->tile_mode, but other complex logic ensures that it can't be
META_TILE_MAXIMIZED, so this is a safe commit.
2012-03-17 16:59:09 -04:00
7f64d6b92e window: Disallow maximization for windows that can't be maximized
Windows that have minimum widths larger than the screen can't be maximized,
even though we put them in a maximized state and allow users to do so:
the window just won't change size and position. Fix this by simply not giving
the option to maximize, like what happens for non-resizable windows.

https://bugzilla.gnome.org/show_bug.cgi?id=643606
2012-03-17 06:40:55 -04:00
8c1b2d5eda Simplify the frame testing logic in callers to grab borders
A lot of code did something similar to:

  MetaFrameBorders borders;

  if (window->frame)
    meta_frame_calc_borders (window->frame, &borders);
  else
    meta_frame_borders_clear (&borders);

Sometimes, the else part was omitted and we were unknowingly using
uninitalized values for OR windows. Clean this up by just testing
for a NULL frame in meta_frame_calc_borders and clearing for the
caller if so.

https://bugzilla.gnome.org/show_bug.cgi?id=643606
2012-03-17 06:40:54 -04:00
578b1c06c7 window: Fix meta_window_get_workspaces when a window isn't on a workspace
Since we're going to be evaluating the work area at startup now, we need
to make sure that we don't iterate over workspaces before they're assigned.
The easiest way to do this is to make sure that meta_window_get_workspaces
doesn't crash.

https://bugzilla.gnome.org/show_bug.cgi?id=643606
2012-03-16 21:01:48 -04:00
6dfde43786 Updated Dutch translation 2012-03-16 23:20:55 +01:00
a8ead4d447 MetaWindowActor: don't draw shadows for tiled windows with a match
The shadow between 2 tiled windows ruins the visual tiles effect.

https://bugzilla.gnome.org/show_bug.cgi?id=643075
2012-03-16 19:12:10 +01:00
2926323a9a window: Introduce meta_window_get_tile_match()
Returns the matching tiled window. This is the topmost tiled window in a
complementary tile mode that is:

 - on the same monitor;
 - on the same workspace;
 - spanning the remaining monitor width;
 - there is no 3rd window stacked between both tiled windows that's
   partially visible in the common edge.

https://bugzilla.gnome.org/show_bug.cgi?id=643075
2012-03-16 19:12:05 +01:00
13bc8f7a76 Updated Hungarian translation 2012-03-16 16:43:47 +01:00
ad516492d2 Updated Telugu Translation 2012-03-16 17:01:52 +05:30
6677c61db3 [l10n]Updated Catalan (Valencian) translation 2012-03-15 23:18:25 +01:00
f26f61ed7d [l10n]Updated Catalan translation 2012-03-15 23:18:20 +01:00
8ca86fa8bf ui: Kill tooltips
After the changes in style handling in GTK+, mutter's tooltips no
longer match the tooltip style used in applications. Given that
all buttons in the default layout are well-known, killing tooltips
altogether rather than fixing the styling issues looks like a valid
approach.

https://bugzilla.gnome.org/show_bug.cgi?id=645101
2012-03-15 22:27:43 +01:00
f2f500836e Automaximize large windows on map
Windows that start up in a size that is almost as big as the workarea create
extra work for the user (resizing or maximizing) so save the user's time by
detecting such windows and automaximize them.

https://bugzilla.gnome.org/show_bug.cgi?id=671677
2012-03-15 22:03:00 +01:00
c39998efee Don't unmaximize to nearly maximized size
Basically we don't really want to create windows that are almost maximized in
size but not actually maximized. This creates work for the user and makes it
very difficult to use and resize manually.

So set the newly unmaximized window size to the previously used size or 80% of the
size of the current workarea (attempting to retain natural aspect ratio if
possible), whichever is smaller.

https://bugzilla.gnome.org/show_bug.cgi?id=671677
2012-03-15 22:02:54 +01:00
3b811f33c7 update Punjabi Translation 2012-03-15 07:19:43 +05:30
beea2f7acd Updated Galician translations 2012-03-14 23:09:25 +01:00
fb4c50478d Updated Portuguese translation 2012-03-14 01:05:10 +00:00
ac0602a02e Updated Latvian translation. 2012-03-14 00:41:14 +02:00
5361e0259f display: Add accessor function for ignored_modifier_mask
Some modifiers like NumLock and ScrollLock don't make sense in
keybindings, which is why we ignore them when matching keybindings
to events. We should do the same in Javascript, so add an accessor
function.

https://bugzilla.gnome.org/show_bug.cgi?id=665215
2012-03-13 20:33:27 +01:00
04bf73ff6d default plugin: animate minimization to icon geometry
Instead of minimizing windows in place, minimize them to the icon
geometry for the window (if set), or to the upper-left corner if
it's not set.

https://bugzilla.gnome.org/show_bug.cgi?id=667437
2012-03-13 13:53:05 -04:00
047b9de1c6 Fix move-to-corner keybindings
The move-to-corner keybindings weren't treated as user actions, which
resulted in them not affecting the saved position - they weren't
always being treated as sticky. Marking them as a user action revealed
bugs in the positioning logic that were hidden by the constraint
code applied to automated moves. Fix those as well. Bug tracked
down by Mariusz Libera.

https://bugzilla.gnome.org/show_bug.cgi?id=661256
2012-03-13 12:19:07 -04:00
39b3244a3e Updated British English translation 2012-03-13 14:33:09 +00:00
63f982eb72 [l10n] Updated Estonian translation 2012-03-13 14:05:39 +02:00
c689306dae Updated Serbian translation 2012-03-13 08:39:49 +01:00
0b7f2f8cd3 theme-viewer: Fix invisible borders
https://bugzilla.gnome.org/show_bug.cgi?id=662895
2012-03-13 00:48:29 -04:00
efc90173b1 display: Add signals for plugins to know when a grab op begins/ends
https://bugzilla.gnome.org/show_bug.cgi?id=670658
2012-03-12 22:53:11 -04:00
9e439a22b5 Updated Norwegian bokmål translation 2012-03-12 18:55:00 +01:00
848c1f52f3 Updated Swedish translation 2012-03-12 18:26:34 +01:00
1b84be7031 Updated Slovenian translation 2012-03-12 15:26:55 +01:00
eb08a65b4c Updated Spanish translation 2012-03-12 14:18:00 +01:00
43ba596a0e Finnish translation update from http://l10n.laxstrom.name/wiki/Gnome_3.4 translation sprint 2012-03-12 11:11:19 +02:00
2e1de1a037 Assamese translation completed 2012-03-12 14:26:59 +05:30
81ede6abf8 Updated Bulgarian translation 2012-03-12 06:45:48 +02:00
1d98f1fee8 prefs: Handle the new META_PREF_DYNAMIC_WORKSPACES enum value
Avoids a -Werror compiler error.
2012-03-12 01:10:27 +01:00
f0582d1a86 Updated Polish translation 2012-03-11 23:19:18 +01:00
607dbf0f43 prefs: Add dynamic-workspaces setting
We currently sync the number of workspaces with the corresponding
preference. This is not really useful with GNOME Shell's dynamic
handling of workspaces, not least as the setting is effectively
ignored. Worse, it will trigger writes to dconf on login, slowing
down startup, so add a setting to indicate that workspaces are managed
dynamically and really ignore the num-workspaces setting when set.

https://bugzilla.gnome.org/show_bug.cgi?id=671568
2012-03-11 22:55:38 +01:00
584cd3e684 Updated Russian translation 2012-03-11 20:41:01 +04:00
90ec5b05f3 Updated Polish translation 2012-03-10 23:02:59 +01:00
7253a75b18 frames: Explicitly initialize style contexts
We were relying on GTK+ emitting GtkWidget::style-updated during
widget initialization to create the GtkStyleContexts used for
window decorations. A recent GTK+ update broke this assumption,
so do the necessary initialization ourselves.

https://bugzilla.gnome.org/show_bug.cgi?id=671796
2012-03-10 22:11:22 +01:00
cdbe3b274f Updated Korean translation 2012-03-10 23:40:56 +09:00
3f3e3ce37e plugins/default: Fix compiler error 2012-03-09 14:05:28 +01:00
5e3d93da87 plugin: Remove unneeded wrapper APIs
Mutter originally started out with the idea that only a subset of the total
API was exposed to plugins, so some APIs are duplicated on MutterPlugin.
We've long since abandoned that idea; remove these wrappers.

https://bugzilla.gnome.org/show_bug.cgi?id=671103
2012-03-08 16:52:44 -05:00
82b1d0d7e5 Updated Basque language 2012-03-06 12:44:57 +01:00
3583e57ec3 Uploaded Ukranian 2012-03-05 08:02:09 +02:00
2ddde04678 Updated Vietnamese translation 2012-03-04 11:35:10 +07:00
feda493fbf po/vi: import from Damned Lies 2012-03-04 11:29:24 +07:00
fc72309b71 [l10n] Updated Estonian translation 2012-03-01 18:05:31 +02:00
860c2a6282 window: Remove prefs listener in _unmanage instead of _finalize
After _unmanage the object is semantically dead even if technically it's not,
so remove the prefs listener here to prevent it being called for a dead
object.

In particular this fixes a crash when starting up gnome-shell with at least
one gimp utility window opened which causes mutter to create a MetaWindow for
it only to immediately get an UnmapNotify afterwards which causes mutter to
unmanage the MetaWindow. Afterwards prefs_changed_callback is called for this
dead MetaWindow and tries to dereference the window->monitor pointer which is
already NULL.

https://bugzilla.gnome.org/show_bug.cgi?id=671087
2012-03-01 10:22:21 +01:00
e6b4a34daf [l10n] Updated Estonian translation 2012-02-29 20:03:26 +02:00
3319cdfec0 Updated Hungarian translation 2012-02-29 03:37:23 +01:00
fc5594faad updated Tamil translation 2012-02-28 14:33:34 +05:30
7c9e0c2ebc Updated Belarusian translation. 2012-02-26 22:23:27 +03:00
9157cc2b70 Updated Belarusian translation. 2012-02-26 16:03:32 +03:00
69e7b32b54 update Punjabi Translation 2012-02-26 09:58:13 +05:30
04835eccb5 update Punjabi Translation 2012-02-26 09:46:42 +05:30
01c363bb6a Use a META_ prefix for enum types, not MUTTER_ 2012-02-23 16:39:28 -05:00
7649772394 configure.in: fix typo in gio-2.0 version 2012-02-23 08:52:20 +01:00
ca3dc2e876 Bump version to 3.3.90
Update NEWS
2012-02-22 21:40:10 -05:00
70d85049b1 configure.in: clean up version checks
Consolidate and simplify checks for required depenencies, and require
Cogl-1.9.6.
2012-02-22 21:40:10 -05:00
29f6f5e0ad configure.in: update an old message 2012-02-22 19:39:47 -05:00
d249cfd040 Pass CoglContext to cogl_texture_pixmap_x11_new()
The experimental Cogl api cogl_texture_pixmap_new() was recently changed
so it now expects an explicit CoglContext argument and it can also
return exceptions now via a GError. This patch updates mutters use of
the api accordingly.
2012-02-21 18:23:22 +00:00
3cb912aee2 MetaShapedTexture: Implement get_paint_volume
Add a get_paint_volume implementation to MetaShapedTexture.
2012-02-21 18:09:25 +01:00
7df823132c Updated Danish translation 2012-02-20 22:37:32 +01:00
41353d642b Updated Serbian translation 2012-02-20 11:59:40 +01:00
c47039db82 window: Fix meta_window_move_frame in the context of the new invisible borders
https://bugzilla.gnome.org/show_bug.cgi?id=659643
2012-02-16 16:46:10 -05:00
0dab6df25a configure: Require Clutter 1.9.10
We depend on API introduced in Clutter 1.9.10. Additionally, remove
a compatibility fallback that isn't needed anymore.
2012-02-16 16:44:03 -05:00
c844bab232 meta-background-actor: Chain up in dispose
This was preventing Clutter from running its dispose, preventing
it from being destroyed correctly. While a major bug and possibly
big memory leak, the most obvious effect was the message that Clutter
spat out:

  Clutter-CRITICAL **: clutter_actor_iter_next: assertion `ri->age == ri->root->priv->age' failed

Since we never disposed the actor correctly, it was never removed
from its parent, and the age wasn't updated correctly.
2012-02-16 16:29:33 -05:00
848f9d1399 Bump version to 3.3.5
Update NEWS
2012-02-07 18:30:01 -05:00
2e63de5c0a Add -Wno-error=deprecated declarations
Even with --enable-compile-warnings=error, avoid erroring out on deprecations
for the moment, since we are hitting many Clutter deprecations and some are
hard to fix.
2012-02-07 18:30:01 -05:00
7319b10d72 MetaShapedTexture: Remove visible_pixels_region
When we were shaping the window with a cairo region, there was an easy
optimization to restrict painting only to the pixels we were going to
actually draw. With rounded corners, the amount of work we have to do
figure out what pixels isn't worth the small savings of not drawing the
completely transparent parts of the corners, so remove this optimization,
and the supporting meta_shaped_texture_get_visible_pixels_region()

https://bugzilla.gnome.org/show_bug.cgi?id=657639
2012-02-03 19:58:21 -05:00
1265efcf78 MetaShapedTexture: Add a new method to flatten the shaped texture into pixels
This will be used by the Shell to implement a screenshot_window method.

https://bugzilla.gnome.org/show_bug.cgi?id=660941
2012-02-03 19:57:38 -05:00
3e0ef03fd9 MetaShapedTexture: Make public and directly derive from ClutterActor
ClutterTexture has many features that we simply don't use and don't make
sense for a subclass with custom drawing. Deriving directly from ClutterActor
simplifies our code by avoiding workarounds and makes things more robust.

Additionally, make it public. GNOME Shell was already assuming that any
MetaShapedTexture was also a ClutterTexture, and we need to replace these
bits with new API for GNOME Shell to use.

https://bugzilla.gnome.org/show_bug.cgi?id=660941
2012-02-03 15:35:41 -05:00
37076941ad Updated Traditional Chinese translation(Hong Kong and Taiwan) 2012-01-29 23:38:40 +08:00
25e43618a4 Updated Norwegian bokmål translation 2012-01-28 17:38:35 +01:00
fd404bafc8 screen: Remove harmless leftover argument
It compiled because it was picking index(3) from strings.h.
2012-01-26 15:27:50 +00:00
3b3b26b000 Bump dependency on gtk+ 3.3.7 2012-01-20 21:00:15 +01:00
33498f6b84 Bump version to 3.3.4
Update NEWS
2012-01-20 12:35:20 -05:00
c0a440b852 Fix crash when meta_display_close() is called with attached modal dialogs
When meta_display_unmanage_window_for_screen() is called, it gets a list
of windows and iterates over them and unmanages them, but unmanaging a
window with attached modal dialogs also unmanages those attached modal
dialogs (in the normal case, temporarily), so we need to guard against
such cases by ref'ing the windows in the list and checking if they have
already been unmanaged.

https://bugzilla.gnome.org/show_bug.cgi?id=668299
https://bugzilla.redhat.com/show_bug.cgi?id=760918
2012-01-19 16:12:56 -05:00
1772a2a59c adjust to new Gtk properties for app menu
https://bugzilla.gnome.org/show_bug.cgi?id=668118
2012-01-18 17:26:12 -05:00
44f362ad87 tile-preview: Remove non-composited case
The main reason for handling the non-composited case was to keep
code differences with metacity small, but the tiling patch[0] never
got merged. In mutter itself, the compositor is not optional, so
there's no good reason for keeping those untested code chunks around.

[0] https://bugzilla.gnome.org/show_bug.cgi?id=607694

https://bugzilla.gnome.org/show_bug.cgi?id=666039
2012-01-17 12:53:33 +01:00
478f1020a4 Updated Galician translations 2012-01-15 01:27:53 +01:00
e8209e7b22 Handle rename of GTK+'s window-unfocused state to backdrop
GTK_STATE_FLAG_WINDOW_UNFOCUSED was renamed to
GTK_STATE_FLAG_BACKDROP.
2012-01-09 19:03:27 -05:00
2d20c9ecad Updated Bulgarian translation 2012-01-08 15:18:52 +02:00
122 changed files with 25671 additions and 33778 deletions

176
NEWS
View File

@ -1,3 +1,179 @@
3.5.4
=====
* Make it possible to reimplement move-to-workspace keybindings from plugins
[Giovanni; #674104]
* Add a preference to ignore hide-titlebar-when-maximized hint [Rico; #678947]
* window: Also use hide-titlebar-when-maximized when tiled [Florian; #679290]
* Center modal dialogs on their parent instead [Florian; #674499]
* Reduce amount of markup in translated messages [Matthias; #679660]
* Fix focus problem after closing a window with focus-follows-mouse
[Jasper; #675982]
* Handle changes of the attach-modal-dialogs preference [Florian; #679904]
* Do not restore tiling on unmaximize [Florian; #677565]
* Misc. fixes and cleanups [Jasper Adriaanse, Jasper, Debarshi, Pavel;
#679153, 673824]
Contributors:
Jasper Lievisse Adriaanse, Giovanni Campagna, Matthias Clasen, Florian Müllner,
Debarshi Ray, Jasper St. Pierre, Rico Tzschichholz, Pavel Vasin
Translations:
Alexander Shopov [bg], Kjartan Maraas [nb], Yaron Shahrabani [he],
Nilamdyuti Goswami [as], Ihar Hrachyshka [be], Daniel Mustieles [es]
3.5.3
=====
* Simplify plugin system [Jasper; #676855]
* meta-window-actor: Don't unredirect shaped windows [Jasper; #677657]
* screen: Add new public meta_screen_get_current_monitor API [Tim; #642591]
* frames: Increase the size of resize corners [Jasper; #677669]
* window: Make some window methods public [Jasper; #678126]
* Fix crash when running mutter stand-alone [Jasper; #678238]
* meta-window-actor: Fix potential crash in shaping code [Jasper; #677977]
* Misc. fixes [Jasper, Marc-Antoine, Rico]
Contributors:
Tim L, Marc-Antoine Perennou, Jasper St. Pierre, Rico Tzschichholz
Translations:
Daniel Mustieles [es], Matej Urbančič [sl], Khaled Hosny [ar],
Bruno Brouard [fr], Fran Diéguez [gl]
3.5.2
=====
* keybindings: Remove 'toggle-recording' binding [Florian; #674376]
* Switch to gtk-doc syntax [Jasper; #673752]
* shaped-texture: never slice shape mask texture [Robert; #674731]
* Make Mutter stop relying on Cogl including a GL header [Neil; #672711]
* Make support for "XFree86" Xinerama mandatory [Owen; #674727]
* meta_window_move_frame(): fix crash when frame is NULL [Owen; #675254]
* Fix memory leaks [Pavel; #672640]
* Code cleanups [Jasper; #671104 #674876 #676052]
* Look for themes in XDG user data dir [Jasper; #675316]
* Remove frame pixel caching [Jasper; #675111]
* stack: Ignore keep-on-top property on maximized windows [Florian; #673581]
* Misc. fixes [Javier, Jasper, Owen, Rico]
Contributors:
Robert Bragg, Javier Járdon, Florian Müllner, Neil Roberts, Jasper St. Pierre,
Owen Taylor, Rico Tzschichholz, Pavel Vasin
Translations:
Praveen Illa [te], Luca Ferretti [it], Daniel Mustieles [es]
3.4.1
=====
* API change: the meta_display_add_keybinding() function added in 3.4
wasn't usable from a GNOME Shell extension, so has been changed to take
a GSettings object rather than the name of a schema [Jasper; #673014]
* Don't try to auto-maximize not-maximizable windows; this fixes the problem
with the Nautilus desktop window being mis-positioned when enabled
[Owen; #673566]
* Fix a crash in the default plugin (not used in GNOME) [Giovanni; #673809]
* Make the <Super> key work when set as the mouse button modifier
[Florian; #662476]
Contributors:
Giovanni Campagna, Florian Muellner, Jasper St. Pierre, Owen Taylor
Translations:
Khaled Hosny [ar], Jordi Serratosa [ca], Carles Ferrando [ca@valencia],
Christian Kirbach [de], Kristjan Schmidt [eo], Arash Mousavi [fa],
Jiro Matsuzawa [ja], Shankar Prasad [kn], Aurimas Černius [lt],
Yinghua Wang [zh_CN]
3.4.0
=====
* Fix crash when a full-screen window is opened [Jasper; #672797]
* Fix memory leaks [Pavel; #672640]
Contributors:
Jasper St. Pierre, Pavel Vasin
Translations:
Marek Černocký, Petr Kovar [cz], Bruno Brouard [fr], Sweta Kothari [gu],
Yaron Shahrabani [he], Changwoo Ryu [kr], Enrico Nicoletto [pt_BR],
Yuri Myasoedov [ru], Muhammet Kara [tr], Nguyễn Thái Ngọc Duy [vi]
3.3.92
======
* Automaximize large windows on map [Adel; #671677]
* When unmaximizing windows, make sure the unminimized size
is signficantly less than the maximized size [Adel; #671677]
* Don't offer maximize option for windows larger than the screen
[Jasper; #643606]
* Always focus the window immediately underneath without restacking
when closing a window [Jasper; #620744]
* Avoid drawing shadows when two windows are tiled together [Rui; #643075]
* Remove tooltips for window decorations [Florian; #645101]
* Add org.gnome.mutter.dynamic-workspaces GSetting - when this is set
to true, workspace counts are never saved to GSettings, avoiding
pointless disk traffic for GNOME dynamic workspaces [Florian; #671568]
* Add ::grab-op-begin, ::grab-op-end signals to MetaDisplay [Jasper; #670658]
* Add meta_display_get_ignored_modifier_mask() [Florian; #665215]
* Remove pointless wrapper methods on MetaPlugin [Jasper; #671103]
* Fix frame drawing with 3.3.x GTK+ releases [Florian; #671796]
* Build fixes [Jasper, Rico, Rui]
* Misc bug fixes [Damien, Jasper, Lionel, Marius, Owen, Rui;
#661256, #667437, #671601, #671087, #672374]
Contributors:
Stefano Facchini, Adel Gadllah, Lionel Landwerlin, Mariusz Libera,
Rui Matos, Florian Müllner, Jasper St. Pierre, Damien Radtke, Owen Taylor,
Rico Tzschichholz
Translations:
Nilamdyuti Goswami [as], Ihar Hrachyshka [be], Alexander Shopov [bg],
David Planella [ca], Carles Ferrando [ca@valencia], Kenneth Nielsen [dk],
Bruce Cowan [en_GB], Daniel Mustieles [es], Mattias Põldaru [et],
Inaki Larranaga Murgoitio [eu], Timo Jyrinki [fi], Fran Diéguez [gl],
Gabor Kelemen [hu], Changwoo Ryu [ko], Anita Reitere [lv],
Kjartan Maraas [nb], Wouter Bolsterlee [nl], A S Alam [pa], Piotr Drąg [pl],
Duarte Loreto [pt], Yuri Myasoedov [ru], Daniel Nylander [se],
Matej Urbančič [sl], Miroslav Nikolić [sr], Tirumurti Vasudevan [ta],
Sasi Bhushan [te], Daniel Korostil [uk], Nguyễn Thái Ngọc Duy [vi],
YunQiang Su [zh_CN], Chao-Hsiung Liao [zh_HK, zh_TW]
3.3.90
======
* Update for Cogl API changes [Robert]
* Bug fixes [Adel, Jasper; #659643]
* Build fixes [Jasper, Owen]
Contributors:
Robert Bragg, Adel Gadllah, Jasper St. Pierre, Owen Taylor
Translations:
Ask H. Larsen [dk], Miroslav Nikolić [sr]
3.3.5
=====
* MetaShapedTexture no longer is a ClutterTexture subclass [Jasper; #660941]
* Add meta_shaped_texture_get_image() [Jasper; #660941]
* Cleanups [Rui, Jasper; #657639]
* Depend on GTK+ 3.3.7 [Rico]
Contributors:
Rui Matos, Jasper St. Pierre, Rico Tzschichholz
Translations:
Kjartan Maraas [nb], Chao-Hsiung Liao [zh_HK, zh_TW]
3.3.4
=====
* Adapt to changes in GtkStateFlags [Owen]
* Redo properties for applications menu corresponding to GTK+ changes -
they are now _GTK_* not DBUS_*. [Ryan]
* Fix crash on gnome-shell restart when a modal dialog is open [Owen; #668299]
* Code cleanup [Florian; #666039]
Contributors:
Ryan Lortie, Florian Müllner, Owen Taylor
Translations:
Alexander Shopov [bg], Fran Diéguez [gl]
3.3.3
=====
* Add keybindings for tiling to left or right [Florian; #648700]

View File

@ -1,8 +1,8 @@
AC_PREREQ(2.50)
m4_define([mutter_major_version], [3])
m4_define([mutter_minor_version], [3])
m4_define([mutter_micro_version], [3])
m4_define([mutter_minor_version], [5])
m4_define([mutter_micro_version], [4])
m4_define([mutter_version],
[mutter_major_version.mutter_minor_version.mutter_micro_version])
@ -61,12 +61,21 @@ AC_CHECK_SIZEOF(__int64)
## byte order
AC_C_BIGENDIAN
GTK_MIN_VERSION=3.3.3
GIO_MIN_VERSION=2.25.10
CANBERRA_GTK=libcanberra-gtk3
CANBERRA_GTK_VERSION=0.26
MUTTER_PC_MODULES="gtk+-3.0 >= $GTK_MIN_VERSION gio-2.0 >= $GIO_MIN_VERSION pango >= 1.2.0 cairo >= 1.10.0 gsettings-desktop-schemas >= 3.3.0"
CLUTTER_PACKAGE=clutter-1.0
MUTTER_PC_MODULES="
gtk+-3.0 >= 3.3.7
gio-2.0 >= 2.25.10
pango >= 1.2.0
cairo >= 1.10.0
gsettings-desktop-schemas >= 3.3.0
xcomposite >= 0.2 xfixes xrender xdamage
$CLUTTER_PACKAGE >= 1.9.10
cogl-1.0 >= 1.9.6
"
GLIB_GSETTINGS
@ -104,17 +113,14 @@ AC_ARG_ENABLE(shape,
[disable mutter's use of the shaped window extension]),,
enable_shape=auto)
## try definining HAVE_BACKTRACE
AC_CHECK_HEADERS(execinfo.h, [AC_CHECK_FUNCS(backtrace)])
AM_GLIB_GNU_GETTEXT
## here we get the flags we'll actually use
# GRegex requires Glib-2.14.0
PKG_CHECK_MODULES(ALL, glib-2.0 >= 2.14.0)
# gtk_window_set_icon_name requires gtk2+-2.6.0
PKG_CHECK_MODULES(MUTTER_MESSAGE, gtk+-3.0 >= $GTK_MIN_VERSION)
PKG_CHECK_MODULES(MUTTER_WINDOW_DEMO, gtk+-3.0 >= $GTK_MIN_VERSION)
PKG_CHECK_MODULES(MUTTER_MESSAGE, gtk+-3.0)
PKG_CHECK_MODULES(MUTTER_WINDOW_DEMO, gtk+-3.0)
# Unconditionally use this dir to avoid a circular dep with gnomecc
GNOME_KEYBINDINGS_KEYSDIR="${datadir}/gnome-control-center/keybindings"
@ -164,31 +170,6 @@ else
fi
fi
XCOMPOSITE_VERSION=0.2
AC_MSG_CHECKING([Xcomposite >= $XCOMPOSITE_VERSION])
if $PKG_CONFIG --atleast-version $XCOMPOSITE_VERSION xcomposite; then
MUTTER_PC_MODULES="$MUTTER_PC_MODULES xcomposite >= $XCOMPOSITE_VERSION xfixes xrender xdamage"
AC_DEFINE(HAVE_COMPOSITE_EXTENSIONS, 1, [Building with compositing manager support])
echo "Building with compositing manager"
## force on render also
have_xrender=yes
else
AC_MSG_ERROR([no. Mutter requires the Xcomposite extension to build.])
fi
CLUTTER_VERSION=1.7.5
CLUTTER_PACKAGE=clutter-1.0
AC_SUBST(CLUTTER_PACKAGE)
if $PKG_CONFIG --atleast-version $CLUTTER_VERSION $CLUTTER_PACKAGE ; then
MUTTER_PC_MODULES="$MUTTER_PC_MODULES $CLUTTER_PACKAGE "
PKG_CHECK_MODULES(CLUTTER, $CLUTTER_PACKAGE)
AC_DEFINE(WITH_CLUTTER, , [Building with Clutter compositor])
else
AC_MSG_ERROR([no. Mutter requires Clutter version $CLUTTER_VERSION.])
fi
INTROSPECTION_VERSION=0.9.5
GOBJECT_INTROSPECTION_CHECK([$INTROSPECTION_VERSION])
@ -220,64 +201,39 @@ fi
PKG_CHECK_MODULES(MUTTER, $MUTTER_PC_MODULES)
# This is used for plugins
AC_SUBST(CLUTTER_PACKAGE)
PKG_CHECK_MODULES(CLUTTER, $CLUTTER_PACKAGE)
AC_PATH_XTRA
ALL_X_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
# Check for Xinerama extension (Solaris impl or Xfree impl)
# Check for Xinerama extension - we only support the "XFree86" style,
# and not the older Solaris-only version; recent Solaris supports the
# XFree86 style.
mutter_save_cppflags="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
AC_ARG_ENABLE(xinerama,
AC_HELP_STRING([--disable-xinerama],
[disable mutter's use of the Xinerama extension]),
try_xinerama=$enable_xinerama,try_xinerama=yes)
use_solaris_xinerama=no
use_xfree_xinerama=no
if test "${try_xinerama}" != no; then
case "$host" in
*-*-solaris*)
# Check for solaris
use_solaris_xinerama=yes
AC_CHECK_LIB(Xext, XineramaGetInfo,
use_solaris_xinerama=yes, use_solaris_xinerama=no,
$ALL_X_LIBS)
if test "x$use_solaris_xinerama" = "xyes"; then
AC_CHECK_HEADER(X11/extensions/xinerama.h,
if test -z "`echo $ALL_X_LIBS | grep "\-lXext" 2> /dev/null`"; then
X_EXTRA_LIBS="-lXext $X_EXTRA_LIBS"
fi
AC_DEFINE(HAVE_SOLARIS_XINERAMA, , [Have Solaris-style Xinerama])
AC_DEFINE(HAVE_XINERAMA, , [Have some version of Xinerama]),
use_solaris_xinerama=no,
[#include <X11/Xlib.h>])
fi
AC_MSG_CHECKING(for Xinerama support on Solaris)
AC_MSG_RESULT($use_solaris_xinerama);
;;
*)
# Check for XFree
use_xfree_xinerama=yes
AC_CHECK_LIB(Xinerama, XineramaQueryExtension,
[AC_CHECK_HEADER(X11/extensions/Xinerama.h,
X_EXTRA_LIBS="-lXinerama $X_EXTRA_LIBS"
if test -z "`echo $ALL_X_LIBS | grep "\-lXext" 2> /dev/null`"; then
X_EXTRA_LIBS="-lXext $X_EXTRA_LIBS"
fi
AC_DEFINE(HAVE_XFREE_XINERAMA, , [Have XFree86-style Xinerama])
AC_DEFINE(HAVE_XINERAMA,, [Have some version of Xinerama]),
use_xfree_xinerama=no,
[#include <X11/Xlib.h>])],
use_xfree_xinerama=no, -lXext $ALL_X_LIBS)
AC_MSG_CHECKING(for Xinerama support on XFree86)
AC_MSG_RESULT($use_xfree_xinerama);
;;
esac
fi
have_xinerama=yes
AC_CHECK_LIB(Xinerama, XineramaQueryExtension,
[AC_CHECK_HEADER(X11/extensions/Xinerama.h,
[X_EXTRA_LIBS="-lXinerama $X_EXTRA_LIBS"
if test -z "`echo $ALL_X_LIBS | grep "\-lXext" 2> /dev/null`"; then
X_EXTRA_LIBS="-lXext $X_EXTRA_LIBS"
fi],
have_xinerama=no,
[#include <X11/Xlib.h>])],
have_xinerama=no, -lXext $ALL_X_LIBS)
AC_MSG_CHECKING(for Xinerama support)
AC_MSG_RESULT($have_xinerama)
CPPFLAGS="$mutter_save_cppflags"
if test x$have_xinerama = xno; then
AC_MSG_ERROR([Xinerama extension was not found])
fi
SHAPE_LIBS=
found_shape=no
AC_CHECK_LIB(Xext, XShapeQueryExtension,
@ -470,7 +426,7 @@ if test "$enable_compile_warnings" != no ; then
if test "$enable_compile_warnings" = error; then
case " $CFLAGS " in
*[\ \ ]-Werror[\ \ ]*) ;;
*) CFLAGS="$CFLAGS -Werror" ;;
*) CFLAGS="$CFLAGS -Werror -Wno-error=deprecated-declarations" ;;
esac
fi
fi
@ -508,8 +464,6 @@ mutter-$VERSION
source code location: ${srcdir}
compiler: ${CC}
XFree86 Xinerama: ${use_xfree_xinerama}
Solaris Xinerama: ${use_solaris_xinerama}
Startup notification: ${have_startup_notification}
libcanberra: ${have_libcanberra}
Introspection: ${found_introspection}
@ -524,8 +478,8 @@ MUTTER_MINOR_VERSION=mutter_minor_version
if expr $MUTTER_MINOR_VERSION % 2 > /dev/null ; then
stable_version=`expr $MUTTER_MINOR_VERSION - 1`
echo "This is the UNSTABLE branch of mutter"
echo -n "Use 2.$stable_version.x for stable "
echo "(gnome-2-$stable_version branch in git)"
echo -n "Use 3.$stable_version.x for stable "
echo "(gnome-3-$stable_version branch in git)"
else
echo "This is the stable branch of mutter"
fi

View File

@ -31,8 +31,7 @@ workspaces. In these cases, there needs to be a rule consistent with
the above about the new window to choose.
Focus method Behavior
click Focus the most recently used window (same as the window
on top)
click Focus the window on top
sloppy Focus the window containing the pointer if there is such
a window, otherwise focus the most recently used window.
mouse Focus the non-DESKTOP window containing the pointer if

1173
po/ar.po

File diff suppressed because it is too large Load Diff

1512
po/as.po

File diff suppressed because it is too large Load Diff

1156
po/be.po

File diff suppressed because it is too large Load Diff

856
po/bg.po

File diff suppressed because it is too large Load Diff

1507
po/ca.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

909
po/cs.po

File diff suppressed because it is too large Load Diff

1042
po/da.po

File diff suppressed because it is too large Load Diff

1114
po/de.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1153
po/eo.po

File diff suppressed because it is too large Load Diff

480
po/es.po
View File

@ -7,35 +7,35 @@
# Pablo Gonzalo del Campo <pablodc@bigfoot.com>,2002,2003.
# Francisco Javier F. Serrador <serrador@cvs.gnome.org>, 2004, 2005, 2006.
# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2008, 2009, 2010, 2011.
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011.
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2011-12-13 13:41+0000\n"
"PO-Revision-Date: 2011-12-16 14:14+0100\n"
"POT-Creation-Date: 2012-07-15 00:47+0000\n"
"PO-Revision-Date: 2012-07-16 16:08+0200\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
#: ../src/50-mutter-windows.xml.in.h:1
msgid "Windows"
msgstr "Ventanas"
#: ../src/50-mutter-windows.xml.in.h:2
msgid "View split on left"
msgstr "Ver división a la izquierda"
#: ../src/50-mutter-windows.xml.in.h:2
#: ../src/50-mutter-windows.xml.in.h:3
msgid "View split on right"
msgstr "Ver división a la derecha"
#: ../src/50-mutter-windows.xml.in.h:3
#| msgid "_Windows"
msgid "Windows"
msgstr "Ventanas"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:492
@ -47,7 +47,7 @@ msgstr ""
"Ya existe un gestor de composición ejecutándose en la monitor %i, pantalla «%"
"s»."
#: ../src/core/bell.c:307
#: ../src/core/bell.c:320
msgid "Bell event"
msgstr "Evento de campana"
@ -56,16 +56,17 @@ msgstr "Evento de campana"
msgid "Unknown window information request: %d"
msgstr "Petición de información de ventana desconocida: %d"
#: ../src/core/delete.c:111
#, c-format
msgid "<tt>%s</tt> is not responding."
msgstr "<tt>%s</tt> no está respondiendo."
#: ../src/core/delete.c:114
#, c-format
#| msgid "<tt>%s</tt> is not responding."
msgid "%s is not responding."
msgstr "%s no está respondiendo."
#: ../src/core/delete.c:118
msgid "Application is not responding."
msgstr "La aplicación no está respondiendo."
#: ../src/core/delete.c:119
#: ../src/core/delete.c:123
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@ -73,25 +74,25 @@ msgstr ""
"Puede elegir esperar un rato para ver si continua o forzar la aplicación "
"para cerrarla completamente."
#: ../src/core/delete.c:126
#: ../src/core/delete.c:130
msgid "_Wait"
msgstr "_Esperar"
#: ../src/core/delete.c:126
#: ../src/core/delete.c:130
msgid "_Force Quit"
msgstr "_Forzar la salida"
#: ../src/core/display.c:365
#: ../src/core/display.c:380
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Falta la extensión %s requerida para la composición"
#: ../src/core/display.c:431
#: ../src/core/display.c:446
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Ocurrió un error al abrir la pantalla de X Window System «%s»\n"
#: ../src/core/keybindings.c:852
#: ../src/core/keybindings.c:844
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@ -100,36 +101,36 @@ msgstr ""
"Algún otro programa ya está usando la clave %s con el modificador %x como "
"una vinculación\n"
#: ../src/core/main.c:206
#: ../src/core/main.c:196
msgid "Disable connection to session manager"
msgstr "Desactivar conexión al gestor de sesión"
#: ../src/core/main.c:212
#: ../src/core/main.c:202
msgid "Replace the running window manager"
msgstr "Reemplazar el gestor de ventanas en ejecución"
#: ../src/core/main.c:218
#: ../src/core/main.c:208
msgid "Specify session management ID"
msgstr "Especificar el ID se gestión de sesión"
#: ../src/core/main.c:223
#: ../src/core/main.c:213
msgid "X Display to use"
msgstr "Pantalla X que usar"
#: ../src/core/main.c:229
#: ../src/core/main.c:219
msgid "Initialize session from savefile"
msgstr "Inicializar sesión desde el archivo de salvaguarda"
#: ../src/core/main.c:235
#: ../src/core/main.c:225
msgid "Make X calls synchronous"
msgstr "Hacer que las llamadas a las X sean síncronas"
#: ../src/core/main.c:504
#: ../src/core/main.c:494
#, c-format
msgid "Failed to scan themes directory: %s\n"
msgstr "Falló al inspeccionar la carpeta de temas: %s\n"
#: ../src/core/main.c:520
#: ../src/core/main.c:510
#, c-format
msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@ -137,7 +138,7 @@ msgstr ""
"No se ha podido encontrar un tema. Asegúrese de que %s existe y contiene los "
"temas usuales.\n"
#: ../src/core/mutter.c:42
#: ../src/core/mutter.c:40
#, c-format
msgid ""
"mutter %s\n"
@ -152,15 +153,15 @@ msgstr ""
"condiciones de copia. NO se proporciona ninguna garantía; ni de\n"
"MERCANTILIDAD O DE IDONEIDAD PARA UN PROPÓSITO PARTICULAR.\n"
#: ../src/core/mutter.c:56
#: ../src/core/mutter.c:54
msgid "Print version"
msgstr "Imprimir versión"
#: ../src/core/mutter.c:62
msgid "Comma-separated list of compositor plugins"
msgstr "Lista de complementos del compositor separados por comas"
#: ../src/core/mutter.c:60
msgid "Mutter plugin to use"
msgstr "Complemento de mutter que usar"
#: ../src/core/prefs.c:1067
#: ../src/core/prefs.c:1065
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@ -168,14 +169,14 @@ msgstr ""
"Los arreglos para aplicaciones rotas se han deshabilitado. Algunas "
"aplicaciones podrían no comportarse correctamente.\n"
#: ../src/core/prefs.c:1142
#: ../src/core/prefs.c:1140
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr ""
"No se pudo analizar la descripción de la tipografía «%s» de la clave "
"GSettings %s\n"
#: ../src/core/prefs.c:1208
#: ../src/core/prefs.c:1206
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@ -184,7 +185,7 @@ msgstr ""
"«%s» encontrado en la base de datos de configuración no es un valor válido "
"para el modificador del botón del ratón\n"
#: ../src/core/prefs.c:1720
#: ../src/core/prefs.c:1724
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@ -193,17 +194,17 @@ msgstr ""
"«%s» encontrado en la base de datos de configuración no es un valor válido "
"para la combinación de teclas «%s»\n"
#: ../src/core/prefs.c:1817
#: ../src/core/prefs.c:1821
#, c-format
msgid "Workspace %d"
msgstr "Área de trabajo %d"
#: ../src/core/screen.c:741
#: ../src/core/screen.c:652
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "La ventana %d en la pantalla «%s» no es válida\n"
#: ../src/core/screen.c:757
#: ../src/core/screen.c:668
#, c-format
msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
@ -212,7 +213,7 @@ msgstr ""
"La ventana %d en la pantalla «%s» ya tiene un gestor de ventanas, intente "
"usar la opción «--replace» para reemplazar el gestor de ventanas activo.\n"
#: ../src/core/screen.c:784
#: ../src/core/screen.c:695
#, c-format
msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
@ -220,12 +221,12 @@ msgstr ""
"No se ha podido obtener la selección del gestor de ventanas en la ventana %d "
"en la pantalla «%s»\n"
#: ../src/core/screen.c:839
#: ../src/core/screen.c:750
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "La ventana %d en la pantalla «%s» ya tiene un gestor de ventanas\n"
#: ../src/core/screen.c:1024
#: ../src/core/screen.c:935
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "No se ha podido liberar el monitor %d en la pantalla «%s»\n"
@ -286,45 +287,45 @@ msgstr ""
"Estas ventanas no soportan «guardar la configuración actual» y tendrán que "
"reiniciarse manualmente la próxima vez que inicie una sesión."
#: ../src/core/util.c:111
#: ../src/core/util.c:80
#, c-format
msgid "Failed to open debug log: %s\n"
msgstr "Ocurrió un error al abrir el registro de errores: %s\n"
#: ../src/core/util.c:121
#: ../src/core/util.c:90
#, c-format
msgid "Failed to fdopen() log file %s: %s\n"
msgstr "Ocurrió un error al hacer fdopen() en el archivo de registro %s: %s\n"
#: ../src/core/util.c:127
#: ../src/core/util.c:96
#, c-format
msgid "Opened log file %s\n"
msgstr "Archivo de registro %s abierto\n"
#: ../src/core/util.c:146 ../src/tools/mutter-message.c:149
#: ../src/core/util.c:115 ../src/tools/mutter-message.c:149
#, c-format
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter fue compilado sin soporte para modo prolijo\n"
#: ../src/core/util.c:290
#: ../src/core/util.c:259
msgid "Window manager: "
msgstr "Administrador de ventanas: "
# Diferenciar de eRRor en el gestor de ventanas, más abajo
#: ../src/core/util.c:438
#: ../src/core/util.c:407
msgid "Bug in window manager: "
msgstr "Error en el gestor de ventanas: "
#: ../src/core/util.c:471
#: ../src/core/util.c:438
msgid "Window manager warning: "
msgstr "Advertencia del gestor de ventanas: "
#: ../src/core/util.c:499
#: ../src/core/util.c:466
msgid "Window manager error: "
msgstr "Error del gestor de ventanas: "
#. first time through
#: ../src/core/window.c:7145
#: ../src/core/window.c:7237
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@ -340,7 +341,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7808
#: ../src/core/window.c:7902
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
@ -350,23 +351,23 @@ msgstr ""
"redimensionable, pero configuró el tamaño mínimo a %d x %d y el tamaño "
"máximo a %d x %d ; esto no tiene mucho sentido.\n"
#: ../src/core/window-props.c:309
#: ../src/core/window-props.c:310
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "La aplicación establecio un _NET_WM_PID %lu erróneo\n"
#: ../src/core/window-props.c:426
#: ../src/core/window-props.c:429
#, c-format
msgid "%s (on %s)"
msgstr "%s (on %s)"
#: ../src/core/window-props.c:1481
#: ../src/core/window-props.c:1484
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr ""
"WM_TRANSIENT_FOR inválido para la ventana 0x%lx especificada para %s.\n"
"WM_TRANSIENT_FOR no válido para la ventana 0x%lx especificada para %s.\n"
#: ../src/core/window-props.c:1492
#: ../src/core/window-props.c:1495
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR ventana 0x%lx para %s crearía un bucle.\n"
@ -389,99 +390,26 @@ msgstr ""
#: ../src/core/xprops.c:411
#, c-format
msgid "Property %s on window 0x%lx contained invalid UTF-8\n"
msgstr "La propiedad %s en la ventana 0x%lx contiene UTF-8 inválido\n"
msgstr "La propiedad %s en la ventana 0x%lx contiene UTF-8 no válido\n"
#: ../src/core/xprops.c:494
#, c-format
msgid ""
"Property %s on window 0x%lx contained invalid UTF-8 for item %d in the list\n"
msgstr ""
"La propiedad %s en la ventana 0x%lx contiene UTF-8 inválido para el elemento "
"%d de la lista\n"
"La propiedad %s en la ventana 0x%lx contiene UTF-8 no válido para el "
"elemento %d de la lista\n"
#: ../src/mutter.desktop.in.h:1 ../src/mutter-wm.desktop.in.h:1
msgid "Mutter"
msgstr "Mutter"
#: ../src/org.gnome.mutter.gschema.xml.in.h:1
msgid "Attach modal dialogs"
msgstr "Adjuntar diálogos modales"
#: ../src/org.gnome.mutter.gschema.xml.in.h:2
msgid "Cancel tab popup"
msgstr "Cancelar pestaña emergente"
#: ../src/org.gnome.mutter.gschema.xml.in.h:3
msgid ""
"Determines whether hidden windows (i.e., minimized windows and windows on "
"other workspaces than the current one) should be kept alive."
msgstr ""
"Determina si las ventanas ocultas (e.g., ventanas minimizadas y ventanas en "
"otros escritorios distintos del actual) deberían mantenerse activas."
#: ../src/org.gnome.mutter.gschema.xml.in.h:4
msgid ""
"Determines whether the use of popup and highlight frame should be disabled "
"for window cycling."
msgstr ""
"Determina si el uso de ventanas emergentes y marcos resaltados se debe "
"desactivar al cambiar entre ventanas."
#: ../src/org.gnome.mutter.gschema.xml.in.h:5
msgid ""
"Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor."
msgstr ""
"Determina si el cambio entre áreas de trabajo debería suceder para las "
"ventanas en todos los monitores o sólo para ventanas en el monitor primario."
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
msgid "Draggable border width"
msgstr "Anchura arrastrable del borde"
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Activar el mosaico en los bordes al arrastrar ventanas a los bordes de la "
"ventana"
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
msgid ""
"If enabled, dropping windows on vertical screen edges maximizes them "
"vertically and resizes them horizontally to cover half of the available "
"area. Dropping windows on the top screen edge maximizes them completely."
msgstr ""
"Si está activada, arrastrar ventanas a los bordes verticales de la pantalla "
"las maximiza verticalmente y las redimensiona horizontalmente para cubrir la "
"mitad del área disponible. Arrastrar ventanas al borde superior de la "
"pantalla las maximiza por completo."
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
msgid "Live Hidden Windows"
msgstr "Ventanas activas ocultas"
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
msgid "Modifier to use for extended window management operations"
msgstr ""
"Modificador que usar para extender las operaciones de gestión sobre ventanas"
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
msgid "No tab popup"
msgstr "No hay pestaña emergente"
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
msgid "Select window from tab popup"
msgstr "Seleccionar ventana de la pestaña emergente"
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
msgstr ""
"La cantidad total de borde arrastrable. Si los bordes visibles del tema no "
"son suficientes, se añadirán bordes invisibles para satisfacer este valor."
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:2
msgid ""
"This key will initiate the \"overlay\", which is a combination window "
"overview and application launching system. The default is intended to be the "
@ -494,7 +422,11 @@ msgstr ""
"combinación de tecla sea la predeterminada o se establezca a una cadena "
"vacía."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:3
msgid "Attach modal dialogs"
msgstr "Adjuntar diálogos modales"
#: ../src/org.gnome.mutter.gschema.xml.in.h:4
msgid ""
"When true, instead of having independent titlebars, modal dialogs appear "
"attached to the titlebar of the parent window and are moved together with "
@ -504,59 +436,86 @@ msgstr ""
"aparecen diálogos modales adjuntos a la barra de título de la ventana padre "
"y se mueven junto con la ventana padre."
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:5
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Activar el mosaico en los bordes al arrastrar ventanas a los bordes de la "
"ventana"
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
msgid ""
"If enabled, dropping windows on vertical screen edges maximizes them "
"vertically and resizes them horizontally to cover half of the available "
"area. Dropping windows on the top screen edge maximizes them completely."
msgstr ""
"Si está activada, arrastrar ventanas a los bordes verticales de la pantalla "
"las maximiza verticalmente y las redimensiona horizontalmente para cubrir la "
"mitad del área disponible. Arrastrar ventanas al borde superior de la "
"pantalla las maximiza por completo."
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
msgid "Workspaces are managed dynamically"
msgstr "Las áreas de trabajo se gestionan dinámicamente"
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
msgid ""
"Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)."
msgstr ""
"Determina si las áreas de trabajo se gestionan dinámicamente o si ha un "
"número estático de áreas de trabajo (determinado por la clave «num-"
"workspaces» en «org.gnome.desktop.wm.preferences»)."
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
msgid "Workspaces only on primary"
msgstr "Áreas de trabajo sólo en el primario"
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
msgid ""
"Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor."
msgstr ""
"Determina si el cambio entre áreas de trabajo debería suceder para las "
"ventanas en todos los monitores o sólo para ventanas en el monitor primario."
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
msgid "No tab popup"
msgstr "No hay pestaña emergente"
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
msgid ""
"Determines whether the use of popup and highlight frame should be disabled "
"for window cycling."
msgstr ""
"Determina si el uso de ventanas emergentes y marcos resaltados se debe "
"desactivar al cambiar entre ventanas."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Draggable border width"
msgstr "Anchura arrastrable del borde"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
msgstr ""
"La cantidad total de borde arrastrable. Si los bordes visibles del tema no "
"son suficientes, se añadirán bordes invisibles para satisfacer este valor."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Select window from tab popup"
msgstr "Seleccionar ventana de la pestaña emergente"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid "Cancel tab popup"
msgstr "Cancelar pestaña emergente"
#: ../src/tools/mutter-message.c:123
#, c-format
msgid "Usage: %s\n"
msgstr "Uso: %s\n"
#: ../src/ui/frames.c:1157
msgid "Close Window"
msgstr "Cerrar la ventana"
#: ../src/ui/frames.c:1160
msgid "Window Menu"
msgstr "Menú de la ventana"
#: ../src/ui/frames.c:1163
msgid "Minimize Window"
msgstr "Minimizar la ventana"
#: ../src/ui/frames.c:1166
msgid "Maximize Window"
msgstr "Maximizar la ventana"
#: ../src/ui/frames.c:1169
msgid "Restore Window"
msgstr "Restablecer la ventana"
#: ../src/ui/frames.c:1172
msgid "Roll Up Window"
msgstr "Enrollar ventana"
#: ../src/ui/frames.c:1175
msgid "Unroll Window"
msgstr "Desenrollar ventana"
#: ../src/ui/frames.c:1178
msgid "Keep Window On Top"
msgstr "Mantener la ventana encima"
#: ../src/ui/frames.c:1181
msgid "Remove Window From Top"
msgstr "Quitar ventana de encima"
#: ../src/ui/frames.c:1184
msgid "Always On Visible Workspace"
msgstr "Siempre en el área de trabajo visible"
#: ../src/ui/frames.c:1187
msgid "Put Window On Only One Workspace"
msgstr "Poner la ventana sólo en un área de trabajo"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:69
msgid "Mi_nimize"
@ -756,49 +715,49 @@ msgstr "Mod5"
msgid "%d x %d"
msgstr "%d x %d"
#: ../src/ui/theme.c:253
#: ../src/ui/theme.c:234
msgid "top"
msgstr "superior"
#: ../src/ui/theme.c:255
#: ../src/ui/theme.c:236
msgid "bottom"
msgstr "inferior"
#: ../src/ui/theme.c:257
#: ../src/ui/theme.c:238
msgid "left"
msgstr "izquierda"
#: ../src/ui/theme.c:259
#: ../src/ui/theme.c:240
msgid "right"
msgstr "derecha"
#: ../src/ui/theme.c:286
#: ../src/ui/theme.c:268
#, c-format
msgid "frame geometry does not specify \"%s\" dimension"
msgstr "La geometría del marco no especifica la dimensión «%s»"
#: ../src/ui/theme.c:305
#: ../src/ui/theme.c:287
#, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr ""
"La geometría del marco no especifica la dimensión «%s» para el borde «%s»"
#: ../src/ui/theme.c:342
#: ../src/ui/theme.c:324
#, c-format
msgid "Button aspect ratio %g is not reasonable"
msgstr "La proporción del botón %g no es razonable"
#: ../src/ui/theme.c:354
#: ../src/ui/theme.c:336
#, c-format
msgid "Frame geometry does not specify size of buttons"
msgstr "La geometría del marco no especifica el tamaño de los botones"
#: ../src/ui/theme.c:1067
#: ../src/ui/theme.c:1049
#, c-format
msgid "Gradients should have at least two colors"
msgstr "Los degradados deben tener al menos dos colores"
#: ../src/ui/theme.c:1219
#: ../src/ui/theme.c:1201
#, c-format
msgid ""
"GTK custom color specification must have color name and fallback in "
@ -808,7 +767,7 @@ msgstr ""
"alternativo entre paréntesis, ejemplo: gtk:custom(foo,bar); no se pudo "
"analizar «%s»"
#: ../src/ui/theme.c:1235
#: ../src/ui/theme.c:1217
#, c-format
msgid ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
@ -817,7 +776,7 @@ msgstr ""
"Caracter «%c» no válido en el parámetro «color_name» de «gtk:custom», sólo «A-Za-"
"z0-9-_» son válidos"
#: ../src/ui/theme.c:1249
#: ../src/ui/theme.c:1231
#, c-format
msgid ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
@ -826,7 +785,7 @@ msgstr ""
"El formato de «gtk:custom» es «gtk:custom(nombre_de_color,"
"nombre_alternativo)», «%s» no respeta el formato"
#: ../src/ui/theme.c:1294
#: ../src/ui/theme.c:1276
#, c-format
msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
@ -836,7 +795,7 @@ msgstr ""
"ejemplo. gtk:fg[NORMAL] donde NORMAL es el estado ; no se ha podido "
"interpretar «%s»"
#: ../src/ui/theme.c:1308
#: ../src/ui/theme.c:1290
#, c-format
msgid ""
"GTK color specification must have a close bracket after the state, e.g. gtk:"
@ -846,18 +805,18 @@ msgstr ""
"estado, ejemplo. gtk:fg[NORMAL] donde NORMAL es el estado ; no se ha podido "
"interpretar «%s»"
#: ../src/ui/theme.c:1319
#: ../src/ui/theme.c:1301
#, c-format
msgid "Did not understand state \"%s\" in color specification"
msgstr "No se entiende el estado «%s» en la especificación del color"
#: ../src/ui/theme.c:1332
#: ../src/ui/theme.c:1314
#, c-format
msgid "Did not understand color component \"%s\" in color specification"
msgstr ""
"No se entiende el componente de color «%s» en la especificación del color"
#: ../src/ui/theme.c:1361
#: ../src/ui/theme.c:1343
#, c-format
msgid ""
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
@ -866,17 +825,17 @@ msgstr ""
"El formato de blend es «blend/bg_color/fg_color/alfa», «%s» no cumple con el "
"formato"
#: ../src/ui/theme.c:1372
#: ../src/ui/theme.c:1354
#, c-format
msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "No se ha podido interpretar el valor alfa «%s» en el color mezclado"
#: ../src/ui/theme.c:1382
#: ../src/ui/theme.c:1364
#, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr "El valor alfa «%s» en el color mezclado no está entre 0.0 y 1.0"
#: ../src/ui/theme.c:1429
#: ../src/ui/theme.c:1411
#, c-format
msgid ""
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
@ -884,31 +843,31 @@ msgstr ""
"El formato de sombreado es «shade/base_color/factor», «%s» no coincide con el "
"formato"
#: ../src/ui/theme.c:1440
#: ../src/ui/theme.c:1422
#, c-format
msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr ""
"No se ha podido interpretar el factor de sombreado «%s» en el color del "
"sombreado"
#: ../src/ui/theme.c:1450
#: ../src/ui/theme.c:1432
#, c-format
msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "El factor de sombreado «%s» en el color sombreado es negativo"
#: ../src/ui/theme.c:1479
#: ../src/ui/theme.c:1461
#, c-format
msgid "Could not parse color \"%s\""
msgstr "No se ha podido interpretar el color «%s»"
#: ../src/ui/theme.c:1790
#: ../src/ui/theme.c:1778
#, c-format
msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr ""
"La expresión de coordenadas contenía un carácter «%s» en cual no está "
"permitido"
#: ../src/ui/theme.c:1817
#: ../src/ui/theme.c:1805
#, c-format
msgid ""
"Coordinate expression contains floating point number '%s' which could not be "
@ -917,32 +876,32 @@ msgstr ""
"La expresión de coordenadas contenía un número de coma flotante «%s» en cual "
"no pudo ser analizado"
#: ../src/ui/theme.c:1831
#: ../src/ui/theme.c:1819
#, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr ""
"La expresión de coordenadas contenía un entero «%s» que no pudo ser analizado"
#: ../src/ui/theme.c:1953
#: ../src/ui/theme.c:1940
#, c-format
msgid ""
"Coordinate expression contained unknown operator at the start of this text: "
"\"%s\""
msgstr ""
"La expresión de coordenadas contenía un operador inválido al inicio de su "
"La expresión de coordenadas contenía un operador no válido al inicio de su "
"texto: «%s»"
#: ../src/ui/theme.c:2010
#: ../src/ui/theme.c:1997
#, c-format
msgid "Coordinate expression was empty or not understood"
msgstr "La expresión de coordenadas estaba vacía o no fue entendida"
#: ../src/ui/theme.c:2121 ../src/ui/theme.c:2131 ../src/ui/theme.c:2165
#: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
#, c-format
msgid "Coordinate expression results in division by zero"
msgstr "La expresión de coordenadas resultó en un error de división por cero"
#: ../src/ui/theme.c:2173
#: ../src/ui/theme.c:2162
#, c-format
msgid ""
"Coordinate expression tries to use mod operator on a floating-point number"
@ -950,7 +909,7 @@ msgstr ""
"La expresión de coordenadas intentó usar un operador mod con un número de "
"coma flotante"
#: ../src/ui/theme.c:2229
#: ../src/ui/theme.c:2218
#, c-format
msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected"
@ -958,19 +917,19 @@ msgstr ""
"La expresión de coordenadas tiene un operador «%s» donde se esperaba un "
"operando"
#: ../src/ui/theme.c:2238
#: ../src/ui/theme.c:2227
#, c-format
msgid "Coordinate expression had an operand where an operator was expected"
msgstr ""
"La expresión de coordenadas tiene un operando donde se esperaba un operador"
#: ../src/ui/theme.c:2246
#: ../src/ui/theme.c:2235
#, c-format
msgid "Coordinate expression ended with an operator instead of an operand"
msgstr ""
"La expresión de coordenadas termina con una operador en vez de un operando"
#: ../src/ui/theme.c:2256
#: ../src/ui/theme.c:2245
#, c-format
msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@ -979,42 +938,42 @@ msgstr ""
"La expresión de coordenadas tiene el operador «%c» seguido del operador «%c» "
"sin un operando entre ellos"
#: ../src/ui/theme.c:2407 ../src/ui/theme.c:2452
#: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441
#, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr ""
"La expresión de coordenadas tenía una variable o constante desconocida «%s»"
#: ../src/ui/theme.c:2506
#: ../src/ui/theme.c:2495
#, c-format
msgid "Coordinate expression parser overflowed its buffer."
msgstr "El parser de la expresión de coordenadas desbordó su búfer."
#: ../src/ui/theme.c:2535
#: ../src/ui/theme.c:2524
#, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr ""
"La expresión de coordenadas tenía un paréntesis cerrado sin un paréntesis "
"abierto"
#: ../src/ui/theme.c:2599
#: ../src/ui/theme.c:2588
#, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr ""
"La expresión de coordenadas tenía un paréntesis abierto sin un paréntesis "
"cerrado"
#: ../src/ui/theme.c:2610
#: ../src/ui/theme.c:2599
#, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr "La expresión de coordenadas no parece tener ni operadores ni operandos"
#: ../src/ui/theme.c:2822 ../src/ui/theme.c:2842 ../src/ui/theme.c:2862
#: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
#, c-format
msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "El tema contenía una expresión que ha resultado en un error: %s\n"
#: ../src/ui/theme.c:4533
#: ../src/ui/theme.c:4498
#, c-format
msgid ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
@ -1023,25 +982,25 @@ msgstr ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> debe ser "
"especificado para este estilo de marco"
#: ../src/ui/theme.c:5066 ../src/ui/theme.c:5091
#: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
#, c-format
msgid ""
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr ""
"Falta <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
#: ../src/ui/theme.c:5139
#: ../src/ui/theme.c:5082
#, c-format
msgid "Failed to load theme \"%s\": %s\n"
msgstr "Ocurrió un error al cargar el tema «%s»: %s\n"
#: ../src/ui/theme.c:5275 ../src/ui/theme.c:5282 ../src/ui/theme.c:5289
#: ../src/ui/theme.c:5296 ../src/ui/theme.c:5303
#: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
#, c-format
msgid "No <%s> set for theme \"%s\""
msgstr "No se configuró <%s> para el tema «%s»"
#: ../src/ui/theme.c:5311
#: ../src/ui/theme.c:5254
#, c-format
msgid ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
@ -1050,7 +1009,7 @@ msgstr ""
"No hay un estilo de marco para el tipo de ventana «%s» en el tema «%s», añada "
"un elemento <window type=\"%s\" style_set=\"whatever\"/>"
#: ../src/ui/theme.c:5709 ../src/ui/theme.c:5771 ../src/ui/theme.c:5834
#: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
#, c-format
msgid ""
"User-defined constants must begin with a capital letter; \"%s\" does not"
@ -1058,7 +1017,7 @@ msgstr ""
"Las constantes definidas por el usuario deben comenzar con una letra "
"mayúscula; «%s» no lo hace"
#: ../src/ui/theme.c:5717 ../src/ui/theme.c:5779 ../src/ui/theme.c:5842
#: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
#, c-format
msgid "Constant \"%s\" has already been defined"
msgstr "La constante «%s» ya ha sido definida"
@ -1084,7 +1043,7 @@ msgstr "El atributo «%s» se ha repetido dos veces en el mismo elemento <%s>"
#: ../src/ui/theme-parser.c:503 ../src/ui/theme-parser.c:552
#, c-format
msgid "Attribute \"%s\" is invalid on <%s> element in this context"
msgstr "El atributo «%s» es inválido en el elemento <%s> en este contexto"
msgstr "El atributo «%s» es no válido en el elemento <%s> en este contexto"
#: ../src/ui/theme-parser.c:594
#, c-format
@ -1134,8 +1093,8 @@ msgid ""
"Invalid title scale \"%s\" (must be one of xx-small,x-small,small,medium,"
"large,x-large,xx-large)\n"
msgstr ""
"Escala de título inválida «%s» (debe ser una de xx-small,x-small,small,medium,"
"large,x-large,xx-large)\n"
"Escala de título no válida «%s» (debe ser una de xx-small,x-small,small,"
"medium,large,x-large,xx-large)\n"
#: ../src/ui/theme-parser.c:1019 ../src/ui/theme-parser.c:1082
#: ../src/ui/theme-parser.c:1116 ../src/ui/theme-parser.c:1219
@ -1449,7 +1408,7 @@ msgstr "No se permite texto dentro del elemento <%s>"
msgid "<%s> specified twice for this theme"
msgstr "<%s> especificado dos veces para este tema"
#: ../src/ui/theme-parser.c:4348
#: ../src/ui/theme-parser.c:4334
#, c-format
msgid "Failed to find a valid file for theme %s\n"
msgstr "Falló al encontrar un archivo válido para el tema%s\n"
@ -1656,6 +1615,52 @@ msgstr ""
"%d expresiones de coordenadas interpretadas en %g segundos (%g segundos de "
"media)\n"
#~ msgid "Comma-separated list of compositor plugins"
#~ msgstr "Lista de complementos del compositor separados por comas"
#~ msgid "Live Hidden Windows"
#~ msgstr "Ventanas activas ocultas"
#~ msgid ""
#~ "Determines whether hidden windows (i.e., minimized windows and windows on "
#~ "other workspaces than the current one) should be kept alive."
#~ msgstr ""
#~ "Determina si las ventanas ocultas (e.g., ventanas minimizadas y ventanas "
#~ "en otros escritorios distintos del actual) deberían mantenerse activas."
#~ msgid "Close Window"
#~ msgstr "Cerrar la ventana"
#~ msgid "Window Menu"
#~ msgstr "Menú de la ventana"
#~ msgid "Minimize Window"
#~ msgstr "Minimizar la ventana"
#~ msgid "Maximize Window"
#~ msgstr "Maximizar la ventana"
#~ msgid "Restore Window"
#~ msgstr "Restablecer la ventana"
#~ msgid "Roll Up Window"
#~ msgstr "Enrollar ventana"
#~ msgid "Unroll Window"
#~ msgstr "Desenrollar ventana"
#~ msgid "Keep Window On Top"
#~ msgstr "Mantener la ventana encima"
#~ msgid "Remove Window From Top"
#~ msgstr "Quitar ventana de encima"
#~ msgid "Always On Visible Workspace"
#~ msgstr "Siempre en el área de trabajo visible"
#~ msgid "Put Window On Only One Workspace"
#~ msgstr "Poner la ventana sólo en un área de trabajo"
#~ msgid "Switch to workspace 1"
#~ msgstr "Cambiar al área de trabajo 1"
@ -1970,9 +1975,6 @@ msgstr ""
#~ msgid "Error setting clutter plugin list: %s\n"
#~ msgstr "Error al establecer la lista de complementos de «Clutter»: %s\n"
#~ msgid "Clutter Plugins"
#~ msgstr "Complementos de «Clutter»"
#~ msgid "Plugins to load for the Clutter-based compositing manager."
#~ msgstr ""
#~ "Complementos que cargar para la gestión de composición basada en «Clutter»."

480
po/et.po
View File

@ -7,253 +7,39 @@
#
# Tõivo Leedjärv <toivo linux ee>, 2004.
# Ivar Smolin <okul linux ee>, 2005, 2006, 20092011.
# Mattias Põldaru <mahfiaz gmail com>, 20082011.
# Mattias Põldaru <mahfiaz@gmail.com>, 20082011, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter MASTER\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&component=general\n"
"POT-Creation-Date: 2011-03-07 23:35+0000\n"
"PO-Revision-Date: 2011-03-09 06:41+0200\n"
"Last-Translator: Ivar Smolin <okul@linux.ee>\n"
"Language-Team: Estonian <gnome-et@linux.ee>\n"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-03-11 22:19+0000\n"
"PO-Revision-Date: 2012-03-12 00:47+0200\n"
"Last-Translator: Mattias Põldaru <mahfiaz@gmail.com>\n"
"Language-Team: Estonian <>\n"
"Language: et\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: et\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
msgid "Switch to workspace 1"
msgstr "Lülitumine 1. tööalale"
msgid "Windows"
msgstr "Aknad"
msgid "Switch to workspace 2"
msgstr "Lülitumine 2. tööalale"
msgid "View split on left"
msgstr "Vaade poolitatakse vasakult"
msgid "Switch to workspace 3"
msgstr "Lülitumine 3. tööalale"
msgid "View split on right"
msgstr "Vaade poolitatakse paremalt"
msgid "Switch to workspace 4"
msgstr "Lülitumine 4. tööalale"
msgid "Switch to workspace 5"
msgstr "Lülitumine 5. tööalale"
msgid "Switch to workspace 6"
msgstr "Lülitumine 6. tööalale"
msgid "Switch to workspace 7"
msgstr "Lülitumine 7. tööalale"
msgid "Switch to workspace 8"
msgstr "Lülitumine 8. tööalale"
msgid "Switch to workspace 9"
msgstr "Lülitumine 9. tööalale"
msgid "Switch to workspace 10"
msgstr "Lülitumine 10. tööalale"
msgid "Switch to workspace 11"
msgstr "Lülitumine 11. tööalale"
msgid "Switch to workspace 12"
msgstr "Lülitumine 12. tööalale"
msgid "Switch to workspace on the left of the current workspace"
msgstr "Lülitumine sellest tööalast vasakul olevale tööalale"
msgid "Switch to workspace on the right of the current workspace"
msgstr "Lülitumine sellest tööalast paremal olevale tööalale"
msgid "Switch to workspace above the current workspace"
msgstr "Lülitumine selle tööala kohal olevale tööalale"
msgid "Switch to workspace below the current workspace"
msgstr "Lülitumine selle tööala all olevale tööalale"
msgid "Move between windows of an application, using a popup window"
msgstr "Liigu rakenduse akende vahel, hüpikaknaga"
msgid "Move backward between windows of an application, using a popup window"
msgstr "Liigu rakenduse akende vahel tagasisuunas, hüpikaknaga"
msgid "Move between windows, using a popup window"
msgstr "Liigu akende vahel, hüpikaknaga"
msgid "Move backward between windows, using a popup window"
msgstr "Liigu akende vahel tagasisuunas, hüpikaknaga"
msgid "Move between panels and the desktop, using a popup window"
msgstr "Liigu paneelide ja töölaua vahel, hüpikaknaga"
msgid "Move backward between panels and the desktop, using a popup window"
msgstr "Liigu tagasisuunas paneelide ja töölaua vahel, hüpikaknaga"
msgid "Move between windows of an application immediately"
msgstr "Liigu koheselt rakenduse akende vahel"
msgid "Move backward between windows of an application immediately"
msgstr "Liigu koheselt rakenduse akende vahel tagasisuunas"
msgid "Move between windows immediately"
msgstr "Liigu koheselt akende vahel"
msgid "Move backward between windows immediately"
msgstr "Liigu koheselt akende vahel tagasisuunas"
msgid "Move between panels and the desktop immediately"
msgstr "Liigu koheselt paneeli ja töölaua vahel"
msgid "Move backward between panels and the desktop immediately"
msgstr "Liigu koheselt tagasisuunas paneelide ja töölaua vahel"
msgid "Hide all normal windows and set focus to the desktop"
msgstr "Peida kõik tavalised aknad ja fokuseeri töölaud"
msgid "Show the panel's main menu"
msgstr "Paneeli peamenüü näitamine"
msgid "Show the panel's \"Run Application\" dialog box"
msgstr "Paneeli dialoogi \"Käivita rakendus\" näitamine"
msgid "Start or stop recording the session"
msgstr "Seansi salvestamise käivitamine või seiskamine"
msgid "Take a screenshot"
msgstr "Kuvatõmmise võtmine"
msgid "Take a screenshot of a window"
msgstr "Kuvatõmmise võtmine aknast"
msgid "Run a terminal"
msgstr "Terminali käivitamine"
msgid "Activate the window menu"
msgstr "Aknamenüü aktiveerimine"
msgid "Toggle fullscreen mode"
msgstr "Täisekraanivaate sisse- ja väljalülitamine"
msgid "Toggle maximization state"
msgstr "Maksimeeritud oleku sisse- ja väljalülitamine"
msgid "Toggle whether a window will always be visible over other windows"
msgstr "Lüliti määrab, kas aken on alati teiste akende kohal nähtav"
msgid "Maximize window"
msgstr "Akna maksimeerimine"
msgid "Restore window"
msgstr "Taasta akna suurus"
msgid "Toggle shaded state"
msgstr "Varjatud oleku lüliti"
msgid "Minimize window"
msgstr "Akna minimeerimine"
msgid "Close window"
msgstr "Akna sulgemine"
msgid "Move window"
msgstr "Teisalda aken"
msgid "Resize window"
msgstr "Muuda akna suurust"
msgid "Toggle whether window is on all workspaces or just one"
msgstr "Lüliti määrab, kas aken on kõigil tööaladel või ainult ühel"
msgid "Move window to workspace 1"
msgstr "Akna tõstmine 1. tööalale"
msgid "Move window to workspace 2"
msgstr "Akna tõstmine 2. tööalale"
msgid "Move window to workspace 3"
msgstr "Akna tõstmine 3. tööalale"
msgid "Move window to workspace 4"
msgstr "Akna tõstmine 4. tööalale"
msgid "Move window to workspace 5"
msgstr "Akna tõstmine 5. tööalale"
msgid "Move window to workspace 6"
msgstr "Akna tõstmine 6. tööalale"
msgid "Move window to workspace 7"
msgstr "Akna tõstmine 7. tööalale"
msgid "Move window to workspace 8"
msgstr "Akna tõstmine 8. tööalale"
msgid "Move window to workspace 9"
msgstr "Akna tõstmine 9. tööalale"
msgid "Move window to workspace 10"
msgstr "Akna tõstmine 10. tööalale"
msgid "Move window to workspace 11"
msgstr "Akna tõstmine 11. tööalale"
msgid "Move window to workspace 12"
msgstr "Akna tõstmine 12. tööalale"
msgid "Move window one workspace to the left"
msgstr "Akna tõstmine ühe tööala võrra vasakule"
msgid "Move window one workspace to the right"
msgstr "Akna tõstmine ühe tööala võrra paremale"
msgid "Move window one workspace up"
msgstr "Akna tõstmine ühe tööala võrra ülespoole"
msgid "Move window one workspace down"
msgstr "Akna tõstmine ühe tööala võrra allapoole"
msgid "Raise window if it's covered by another window, otherwise lower it"
msgstr "Tõsta aken, kui seda katab teine aken, muul juhul vii tahapoole"
msgid "Raise window above other windows"
msgstr "Akna tõstmine teiste akende kohale"
msgid "Lower window below other windows"
msgstr "Saada aken teiste taha"
msgid "Maximize window vertically"
msgstr "Maksimeeri aken vertikaalselt"
msgid "Maximize window horizontally"
msgstr "Maksimeeri aken horisontaalselt"
msgid "Move window to north-west (top left) corner"
msgstr "Akna tõstmine ekraani loodepoolsesse (ülemisse vasakusse) nurka"
msgid "Move window to north-east (top right) corner"
msgstr "Akna tõstmine ekraani kirdepoolsesse (ülemisse paremasse) nurka"
msgid "Move window to south-west (bottom left) corner"
msgstr "Akna tõstmine ekraani edelapoolsesse (alumisse vasakusse) nurka"
msgid "Move window to south-east (bottom right) corner"
msgstr "Akna tõstmine ekraani kagupoolsesse (alumisse paremasse) nurka"
msgid "Move window to north (top) side of screen"
msgstr "Akna tõstmine ekraani põhjapoolsesse (ülemisse) serva"
msgid "Move window to south (bottom) side of screen"
msgstr "Akna tõstmine ekraani lõunapoolsesse (alumisse) serva"
msgid "Move window to east (right) side of screen"
msgstr "Akna tõstmine ekraani idapoolsesse (paremasse) serva"
msgid "Move window to west (left) side of screen"
msgstr "Akna tõstmine ekraani läänepoolsesse (vasakusse) serva"
msgid "Move window to center of screen"
msgstr "Akna tõstmine ekraani keskele"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display \"%s"
"\"."
msgstr "Teine komposiithaldur juba töötab ekraani %i kuval \"%s\"."
msgid "Bell event"
msgstr "Helina sündmus"
@ -262,11 +48,13 @@ msgstr "Helina sündmus"
msgid "Unknown window information request: %d"
msgstr "Tundmatu aknateabe päring: %d"
#. Translators: %s is a window title
#, c-format
msgid "<tt>%s</tt> is not responding."
msgstr "<tt>%s</tt> ei vasta."
msgid "Application is not responding."
msgstr "Rakendus ei vasta."
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@ -294,27 +82,6 @@ msgstr ""
"Mõni teine programm juba kasutab klahvi %s koos muuteklahvidega %x "
"kiirklahvina\n"
#. Displayed when a keybinding which is
#. * supposed to launch a program fails.
#.
#, c-format
msgid ""
"There was an error running <tt>%s</tt>:\n"
"\n"
"%s"
msgstr ""
"<tt>%s</tt> käivitamisel esines viga:\n"
"\n"
"%s"
#, c-format
msgid "No command %d has been defined.\n"
msgstr "Käsku %d pole defineeritud.\n"
#, c-format
msgid "No terminal command has been defined.\n"
msgstr "Terminalikäsku pole defineeritud.\n"
msgid "Disable connection to session manager"
msgstr "Seansihalduriga ühendumise keelamine"
@ -364,39 +131,6 @@ msgstr "Versiooni printimine"
msgid "Comma-separated list of compositor plugins"
msgstr "Komaga eraldatud nimekiri komposiitmontaaži pluginatest"
#.
#. * We found it, but it was invalid. Complain.
#. *
#. * FIXME: This replicates the original behaviour, but in the future
#. * we might consider reverting invalid keys to their original values.
#. * (We know the old value, so we can look up a suitable string in
#. * the symtab.)
#. *
#. * (Empty comment follows so the translators don't see this.)
#.
#.
#, c-format
msgid "GConf key '%s' is set to an invalid value\n"
msgstr "GConf võtme '%s' väärtus on vigane\n"
#, c-format
msgid "%d stored in GConf key %s is out of range %d to %d\n"
msgstr ""
"%d, mis on salvestatud GConf võtmes %s, on väljaspool piirkonda %d - %d\n"
#, c-format
msgid "GConf key \"%s\" is set to an invalid type\n"
msgstr "GConf-i võti \"%s\" on määratud vigase tüübiga\n"
#, c-format
msgid "GConf key %s is already in use and can't be used to override %s\n"
msgstr ""
"GConfi võti %s on juba kasutusel ja sellega ei saa tühistada võtit %s\n"
#, c-format
msgid "Can't override GConf key, %s not found\n"
msgstr "GConfi võtit pole võimalik tühistada, võtit %s ei leitud\n"
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@ -405,8 +139,8 @@ msgstr ""
"ei pruugi õigesti käituda.\n"
#, c-format
msgid "Could not parse font description \"%s\" from GConf key %s\n"
msgstr "Fondi kirjeldust \"%s\" GConf võtmest %s ei saa töödelda\n"
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Fondi kirjeldust \"%s\" GSettings võtmest %s pole võimalik töödelda\n"
#, c-format
msgid ""
@ -416,14 +150,6 @@ msgstr ""
"Seadistuste andmebaasist leitud \"%s\" ei ole sobiv väärtus hiireklahvi "
"modifikaatoriks\n"
#, c-format
msgid "Error setting number of workspaces to %d: %s\n"
msgstr "Viga tööalade arvuks %d määramisel: %s\n"
#, c-format
msgid "Workspace %d"
msgstr "Tööala %d"
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@ -433,16 +159,8 @@ msgstr ""
"\"\n"
#, c-format
msgid "Error setting name for workspace %d to \"%s\": %s\n"
msgstr "Viga tööalale %d nime \"%s\" määramisel: %s\n"
#, c-format
msgid "Error setting live hidden windows status status: %s\n"
msgstr "Viga varjus elushoitavate akende oleku määramisel: %s\n"
#, c-format
msgid "Error setting no tab popup status: %s\n"
msgstr ""
msgid "Workspace %d"
msgstr "Tööala %d"
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
@ -540,10 +258,6 @@ msgstr "Aknahalduri hoiatus: "
msgid "Window manager error: "
msgstr "Aknahalduri viga: "
#. Translators: This is the title used on dialog boxes
msgid "Mutter"
msgstr "Mutter"
#. first time through
#, c-format
msgid ""
@ -581,6 +295,12 @@ msgstr "%s (masinas %s)"
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Vigane WM_TRANSIENT_FOR aknale 0x%lx määratud %s jaoks.\n"
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr ""
"WM_TRANSIENT_FOR aknale 0x%lx määratud %s jaoks tekitaks tsüklilise "
"korduse.\n"
#, c-format
msgid ""
"Window 0x%lx has property %s\n"
@ -604,18 +324,8 @@ msgid ""
"Property %s on window 0x%lx contained invalid UTF-8 for item %d in the list\n"
msgstr "Omadus %s aknal 0x%lx sisaldab vigast UTF-8 %d kirjele nimekirjas\n"
msgid "Attach modal dialogs"
msgstr "Modaaldialoogide kinnistamine"
msgid ""
"Determines whether hidden windows (i.e., minimized windows and windows on "
"other workspaces than the current one) should be kept alive."
msgstr ""
"Määrab, kas varjatud aknaid (nt minimeeritud ja teistel tööaladel aknad) "
"hoitakse elus."
msgid "Live Hidden Windows"
msgstr "Varjatud akende aktiivsus"
msgid "Mutter"
msgstr "Mutter"
msgid "Modifier to use for extended window management operations"
msgstr "Laiendatud aknaoperatsioonide korral kasutatav muuteklahv"
@ -632,6 +342,9 @@ msgstr ""
"klahv\". Eeldatavasti määratakse selle seose väärtuseks vaikimisi või tühi "
"sõne."
msgid "Attach modal dialogs"
msgstr "Modaaldialoogide kinnistamine"
msgid ""
"When true, instead of having independent titlebars, modal dialogs appear "
"attached to the titlebar of the parent window and are moved together with "
@ -640,6 +353,75 @@ msgstr ""
"Kui märgitud, siis eraldi tiitliribade asemel on moodaalsed dialoogid "
"emaakna tiitliribade küljes ning liiguvad koos emaaknaga."
msgid "Live Hidden Windows"
msgstr "Varjatud akende aktiivsus"
msgid ""
"Determines whether hidden windows (i.e., minimized windows and windows on "
"other workspaces than the current one) should be kept alive."
msgstr ""
"Määrab, kas varjatud aknaid (nt minimeeritud ja teistel tööaladel aknad) "
"hoitakse elus."
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Akna ümberpaigutamine selle lohistamisel ekraani serva"
msgid ""
"If enabled, dropping windows on vertical screen edges maximizes them "
"vertically and resizes them horizontally to cover half of the available "
"area. Dropping windows on the top screen edge maximizes them completely."
msgstr ""
"Kui märgitud, siis akna lohistamine ekraani külgservale maksimeerib selle "
"vertikaalselt ja laius katab pool saadaolevast laiusest. Akna lohistamine "
"ekraani ülaserva maksimeerib akna täielikult."
msgid "Workspaces are managed dynamically"
msgstr "Tööalade dünaamiline haldus"
msgid ""
"Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)."
msgstr ""
"Määrab, kas tööalasid hallatakse dünaamiliselt või on nende arv staatiline "
"(arvu määrab org.gnome.desktop.wm.preferences all võti num-workspaces)."
msgid "Workspaces only on primary"
msgstr "Tööalad ainult peamisel"
msgid ""
"Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor."
msgstr ""
"Määrab, kas tööalade vahetamine mõjutab kõiki aknaid kõigil monitoridel või "
"ainult aknaid peamisel monitoril."
msgid "No tab popup"
msgstr "Tabulaatoril pole hüpikakent"
msgid ""
"Determines whether the use of popup and highlight frame should be disabled "
"for window cycling."
msgstr ""
"Kui märgitud, siis on hüpikaken ja esiletõstmise raam keelatud akende "
"vahetamisel."
msgid "Draggable border width"
msgstr "Lohistatava äärise laius."
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
msgstr ""
"Lohistatava äärise laius. Kui kujunduse nähtavatest ääristest ei piisa, "
"lisatakse puuduoleva osa jaoks nähtamatu ääris."
msgid "Select window from tab popup"
msgstr "Akna valimine tabulaatori hüpikaknalt"
msgid "Cancel tab popup"
msgstr "Tabulaatori hüpikakna katkestamine"
#, c-format
msgid "Usage: %s\n"
msgstr "Kasutamine: %s\n"
@ -877,6 +659,30 @@ msgstr "Raami geomeetria ei määra nuppude suurust"
msgid "Gradients should have at least two colors"
msgstr "Värviüleminekus peaks olema vähemalt kaks värvi"
#, c-format
msgid ""
"GTK custom color specification must have color name and fallback in "
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
msgstr ""
"GTK kohandatud värvi määrang peab sisaldama sulgudes värvi nimetust ning "
"varuvärvi, nt gtk:custom(foo,bar); väärtust \"%s\" pole võimalik töödelda"
#, c-format
msgid ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
"_ are valid"
msgstr ""
"gtk:custom color_name parameetris sobimatu märk '%c', lubatud on ainult A-Za-"
"z0-9-_"
#, c-format
msgid ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
"fit the format"
msgstr ""
"Gtk:custom vorming on \"gtk:custom(värvi_nimi,varuvärv)\", \"%s\" ei sobi "
"selle vorminguga"
#, c-format
msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
@ -1511,25 +1317,3 @@ msgstr "y väärtus oli %d, oodati väärtust %d"
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr ""
"%d koordinaatide avaldis töödeldi %g sekundiga (keskmine %g sekundit)\n"
#~ msgid ""
#~ "Don't make fullscreen windows that are maximized and have no decorations"
#~ msgstr "Ei tehta maksimeeritud ilma raamita täisekraanaknaid."
#~ msgid "Whether window popup/frame should be shown when cycling windows."
#~ msgstr "Kas hüpikakent/raami näidatakse akende vahetamisel."
#~ msgid "Internal argument for GObject introspection"
#~ msgstr "GObject enesevaatluse siseargument"
#~ msgid "Failed to restart: %s\n"
#~ msgstr "Tõrge taaskäivitamisel: %s\n"
#~ msgid "Error setting clutter plugin list: %s\n"
#~ msgstr "Viga clutteri pluginate nimekirja määramisel: %s\n"
#~ msgid "Clutter Plugins"
#~ msgstr "Clutteri pluginad"
#~ msgid "Plugins to load for the Clutter-based compositing manager."
#~ msgstr "Clutteril põhineva komposiitmontaažihalduri laadimise pluginad."

939
po/eu.po

File diff suppressed because it is too large Load Diff

6044
po/fa.po

File diff suppressed because it is too large Load Diff

1299
po/fi.po

File diff suppressed because it is too large Load Diff

871
po/fr.po

File diff suppressed because it is too large Load Diff

1187
po/gl.po

File diff suppressed because it is too large Load Diff

1368
po/gu.po

File diff suppressed because it is too large Load Diff

371
po/he.po
View File

@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: metacity.HEAD.he\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-12-30 10:48+0200\n"
"PO-Revision-Date: 2011-12-30 10:49+0200\n"
"POT-Creation-Date: 2012-07-10 22:43+0300\n"
"PO-Revision-Date: 2012-07-10 22:44+0200\n"
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
"Language-Team: Hebrew <he@li.org>\n"
"Language: he\n"
@ -20,17 +20,17 @@ msgstr ""
"X-Generator: KBabel 1.10.2\n"
#: ../src/50-mutter-windows.xml.in.h:1
msgid "Windows"
msgstr "חלונות"
#: ../src/50-mutter-windows.xml.in.h:2
msgid "View split on left"
msgstr "פיצול הצפייה משמאל"
#: ../src/50-mutter-windows.xml.in.h:2
#: ../src/50-mutter-windows.xml.in.h:3
msgid "View split on right"
msgstr "פיצול הצפייה מימין"
#: ../src/50-mutter-windows.xml.in.h:3
msgid "Windows"
msgstr "חלונות"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:492
@ -38,7 +38,7 @@ msgstr "חלונות"
msgid "Another compositing manager is already running on screen %i on display \"%s\"."
msgstr "מנהל תצוגת חלונות אחר כבר פועל במסך %i בתצוגה \"%s\"."
#: ../src/core/bell.c:307
#: ../src/core/bell.c:320
msgid "Bell event"
msgstr "אירוע פעמון"
@ -68,12 +68,12 @@ msgstr "ה_מתנה"
msgid "_Force Quit"
msgstr "_אילוץ סגירה"
#: ../src/core/display.c:361
#: ../src/core/display.c:380
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Missing %s extension required for compositing"
#: ../src/core/display.c:427
#: ../src/core/display.c:446
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Failed to open X Window System display '%s'\n"
@ -83,36 +83,36 @@ msgstr "Failed to open X Window System display '%s'\n"
msgid "Some other program is already using the key %s with modifiers %x as a binding\n"
msgstr "תוכנית אחרת כבר משתמשת במקש %s עם המקש %x כצירוף\n"
#: ../src/core/main.c:206
#: ../src/core/main.c:196
msgid "Disable connection to session manager"
msgstr "Disable connection to session manager"
#: ../src/core/main.c:212
#: ../src/core/main.c:202
msgid "Replace the running window manager"
msgstr "Replace the running window manager"
#: ../src/core/main.c:218
#: ../src/core/main.c:208
msgid "Specify session management ID"
msgstr "Specify session management ID"
#: ../src/core/main.c:223
#: ../src/core/main.c:213
msgid "X Display to use"
msgstr "X Display to use"
#: ../src/core/main.c:229
#: ../src/core/main.c:219
msgid "Initialize session from savefile"
msgstr "Initialize session from savefile"
#: ../src/core/main.c:235
#: ../src/core/main.c:225
msgid "Make X calls synchronous"
msgstr "Make X calls synchronous"
#: ../src/core/main.c:504
#: ../src/core/main.c:494
#, c-format
msgid "Failed to scan themes directory: %s\n"
msgstr "Failed to scan themes directory: %s\n"
#: ../src/core/main.c:520
#: ../src/core/main.c:510
#, c-format
msgid "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
msgstr "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@ -135,54 +135,54 @@ msgid "Print version"
msgstr "Print version"
#: ../src/core/mutter.c:60
msgid "Comma-separated list of compositor plugins"
msgstr "Comma-separated list of compositor plugins"
msgid "Mutter plugin to use"
msgstr "תוסף ה־mutter לשימוש"
#: ../src/core/prefs.c:1069
#: ../src/core/prefs.c:1065
msgid "Workarounds for broken applications disabled. Some applications may not behave properly.\n"
msgstr "Workarounds for broken applications disabled. Some applications may not behave properly.\n"
#: ../src/core/prefs.c:1144
#: ../src/core/prefs.c:1140
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Could not parse font description \"%s\" from GSettings key %s\n"
#: ../src/core/prefs.c:1210
#: ../src/core/prefs.c:1206
#, c-format
msgid "\"%s\" found in configuration database is not a valid value for mouse button modifier\n"
msgstr "\"%s\" found in configuration database is not a valid value for mouse button modifier\n"
#: ../src/core/prefs.c:1722
#: ../src/core/prefs.c:1724
#, c-format
msgid "\"%s\" found in configuration database is not a valid value for keybinding \"%s\"\n"
msgstr "\"%s\" found in configuration database is not a valid value for keybinding \"%s\"\n"
#: ../src/core/prefs.c:1819
#: ../src/core/prefs.c:1821
#, c-format
msgid "Workspace %d"
msgstr "סביבת עבודה %d"
#: ../src/core/screen.c:730
#: ../src/core/screen.c:652
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Screen %d on display '%s' is invalid\n"
#: ../src/core/screen.c:746
#: ../src/core/screen.c:668
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager; try using the --replace option to replace the current window manager.\n"
msgstr "Screen %d on display \"%s\" already has a window manager; try using the --replace option to replace the current window manager.\n"
#: ../src/core/screen.c:773
#: ../src/core/screen.c:695
#, c-format
msgid "Could not acquire window manager selection on screen %d display \"%s\"\n"
msgstr "Could not acquire window manager selection on screen %d display \"%s\"\n"
#: ../src/core/screen.c:828
#: ../src/core/screen.c:750
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Screen %d on display \"%s\" already has a window manager\n"
#: ../src/core/screen.c:1013
#: ../src/core/screen.c:935
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Could not release screen %d on display \"%s\"\n"
@ -241,45 +241,45 @@ msgstr "Unknown element %s"
msgid "These windows do not support &quot;save current setup&quot; and will have to be restarted manually next time you log in."
msgstr "חלונות אלו אינם תומכים ב&quot;שמירת ההגדרות הנוכחיות&quot;, ויהיה צורך באתחול ידני בכניסה הבאה שלך."
#: ../src/core/util.c:111
#: ../src/core/util.c:80
#, c-format
msgid "Failed to open debug log: %s\n"
msgstr "Failed to open debug log: %s\n"
#: ../src/core/util.c:121
#: ../src/core/util.c:90
#, c-format
msgid "Failed to fdopen() log file %s: %s\n"
msgstr "Failed to fdopen() log file %s: %s\n"
#: ../src/core/util.c:127
#: ../src/core/util.c:96
#, c-format
msgid "Opened log file %s\n"
msgstr "Opened log file %s\n"
#: ../src/core/util.c:146
#: ../src/core/util.c:115
#: ../src/tools/mutter-message.c:149
#, c-format
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter הודר ללא תמיכה במצב פירוט\n"
#: ../src/core/util.c:290
#: ../src/core/util.c:259
msgid "Window manager: "
msgstr "Window manager: "
#: ../src/core/util.c:438
#: ../src/core/util.c:407
msgid "Bug in window manager: "
msgstr "Bug in window manager: "
#: ../src/core/util.c:471
#: ../src/core/util.c:438
msgid "Window manager warning: "
msgstr "Window manager warning: "
#: ../src/core/util.c:499
#: ../src/core/util.c:466
msgid "Window manager error: "
msgstr "Window manager error: "
#. first time through
#: ../src/core/window.c:7180
#: ../src/core/window.c:7237
#, c-format
msgid "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER window as specified in the ICCCM.\n"
msgstr "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER window as specified in the ICCCM.\n"
@ -291,27 +291,27 @@ msgstr "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADE
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7843
#: ../src/core/window.c:7902
#, c-format
msgid "Window %s sets an MWM hint indicating it isn't resizable, but sets min size %d x %d and max size %d x %d; this doesn't make much sense.\n"
msgstr "Window %s sets an MWM hint indicating it isn't resizable, but sets min size %d x %d and max size %d x %d; this doesn't make much sense.\n"
#: ../src/core/window-props.c:309
#: ../src/core/window-props.c:310
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Application set a bogus _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:426
#: ../src/core/window-props.c:429
#, c-format
msgid "%s (on %s)"
msgstr "%s (מעל %s)"
#: ../src/core/window-props.c:1481
#: ../src/core/window-props.c:1484
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
#: ../src/core/window-props.c:1492
#: ../src/core/window-props.c:1495
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
@ -347,118 +347,74 @@ msgid "Mutter"
msgstr "Mutter"
#: ../src/org.gnome.mutter.gschema.xml.in.h:1
msgid "Modifier to use for extended window management operations"
msgstr "Modifier to use for extended window management operations"
#: ../src/org.gnome.mutter.gschema.xml.in.h:2
msgid "This key will initiate the \"overlay\", which is a combination window overview and application launching system. The default is intended to be the \"Windows key\" on PC hardware. It's expected that this binding either the default or set to the empty string."
msgstr "This key will initiate the \"overlay\", which is a combination window overview and application launching system. The default is intended to be the \"Windows key\" on PC hardware. It's expected that this binding either the default or set to the empty string."
#: ../src/org.gnome.mutter.gschema.xml.in.h:3
msgid "Attach modal dialogs"
msgstr "Attach modal dialogs"
#: ../src/org.gnome.mutter.gschema.xml.in.h:2
msgid "Cancel tab popup"
msgstr "Cancel tab popup"
#: ../src/org.gnome.mutter.gschema.xml.in.h:3
msgid "Determines whether hidden windows (i.e., minimized windows and windows on other workspaces than the current one) should be kept alive."
msgstr "Determines whether hidden windows (i.e., minimized windows and windows on other workspaces than the current one) should be kept alive."
#: ../src/org.gnome.mutter.gschema.xml.in.h:4
msgid "Determines whether the use of popup and highlight frame should be disabled for window cycling."
msgstr "Determines whether the use of popup and highlight frame should be disabled for window cycling."
msgid "When true, instead of having independent titlebars, modal dialogs appear attached to the titlebar of the parent window and are moved together with the parent window."
msgstr "When true, instead of having independent titlebars, modal dialogs appear attached to the titlebar of the parent window and are moved together with the parent window."
#: ../src/org.gnome.mutter.gschema.xml.in.h:5
msgid "Determines whether workspace switching should happen for windows on all monitors or only for windows on the primary monitor."
msgstr "Determines whether workspace switching should happen for windows on all monitors or only for windows on the primary monitor."
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
msgid "Draggable border width"
msgstr "Draggable border width"
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Enable edge tiling when dropping windows on screen edges"
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
msgid "If enabled, dropping windows on vertical screen edges maximizes them vertically and resizes them horizontally to cover half of the available area. Dropping windows on the top screen edge maximizes them completely."
msgstr "If enabled, dropping windows on vertical screen edges maximizes them vertically and resizes them horizontally to cover half of the available area. Dropping windows on the top screen edge maximizes them completely."
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
msgid "Workspaces are managed dynamically"
msgstr "Workspaces are managed dynamically"
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
msgid "Determines whether workspaces are managed dynamically or whether there's a static number of workspaces (determined by the num-workspaces key in org.gnome.desktop.wm.preferences)."
msgstr "Determines whether workspaces are managed dynamically or whether there's a static number of workspaces (determined by the num-workspaces key in org.gnome.desktop.wm.preferences)."
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
msgid "Live Hidden Windows"
msgstr "Live Hidden Windows"
msgid "Workspaces only on primary"
msgstr "Workspaces only on primary"
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
msgid "Modifier to use for extended window management operations"
msgstr "Modifier to use for extended window management operations"
msgid "Determines whether workspace switching should happen for windows on all monitors or only for windows on the primary monitor."
msgstr "Determines whether workspace switching should happen for windows on all monitors or only for windows on the primary monitor."
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
msgid "No tab popup"
msgstr "No tab popup"
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
msgid "Select window from tab popup"
msgstr "Select window from tab popup"
msgid "Determines whether the use of popup and highlight frame should be disabled for window cycling."
msgstr "Determines whether the use of popup and highlight frame should be disabled for window cycling."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Draggable border width"
msgstr "Draggable border width"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid "The amount of total draggable borders. If the theme's visible borders are not enough, invisible borders will be added to meet this value."
msgstr "The amount of total draggable borders. If the theme's visible borders are not enough, invisible borders will be added to meet this value."
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid "This key will initiate the \"overlay\", which is a combination window overview and application launching system. The default is intended to be the \"Windows key\" on PC hardware. It's expected that this binding either the default or set to the empty string."
msgstr "This key will initiate the \"overlay\", which is a combination window overview and application launching system. The default is intended to be the \"Windows key\" on PC hardware. It's expected that this binding either the default or set to the empty string."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "When true, instead of having independent titlebars, modal dialogs appear attached to the titlebar of the parent window and are moved together with the parent window."
msgstr "When true, instead of having independent titlebars, modal dialogs appear attached to the titlebar of the parent window and are moved together with the parent window."
msgid "Select window from tab popup"
msgstr "Select window from tab popup"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid "Workspaces only on primary"
msgstr "Workspaces only on primary"
msgid "Cancel tab popup"
msgstr "Cancel tab popup"
#: ../src/tools/mutter-message.c:123
#, c-format
msgid "Usage: %s\n"
msgstr "שימוש: %s\n"
#: ../src/ui/frames.c:1157
msgid "Close Window"
msgstr "סגור חלון"
#: ../src/ui/frames.c:1160
msgid "Window Menu"
msgstr "תפריט חלון"
#: ../src/ui/frames.c:1163
msgid "Minimize Window"
msgstr "מזער חלון"
#: ../src/ui/frames.c:1166
msgid "Maximize Window"
msgstr "הגדל חלון"
#: ../src/ui/frames.c:1169
msgid "Restore Window"
msgstr "שחזר חלון"
#: ../src/ui/frames.c:1172
msgid "Roll Up Window"
msgstr "גלול חלון מעלה"
#: ../src/ui/frames.c:1175
msgid "Unroll Window"
msgstr "בטל גלילה"
#: ../src/ui/frames.c:1178
msgid "Keep Window On Top"
msgstr "שמור על החלון גלוי"
#: ../src/ui/frames.c:1181
msgid "Remove Window From Top"
msgstr "בטל שמירת החלון גלוי"
#: ../src/ui/frames.c:1184
msgid "Always On Visible Workspace"
msgstr "הראה בכל סביבות העבודה"
#: ../src/ui/frames.c:1187
msgid "Put Window On Only One Workspace"
msgstr "הראה את החלון על סביבת עבודה אחת בלבד"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:69
msgid "Mi_nimize"
@ -659,247 +615,247 @@ msgstr "Mod5"
msgid "%d x %d"
msgstr "%d x %d"
#: ../src/ui/theme.c:253
#: ../src/ui/theme.c:234
msgid "top"
msgstr "top"
#: ../src/ui/theme.c:255
#: ../src/ui/theme.c:236
msgid "bottom"
msgstr "bottom"
#: ../src/ui/theme.c:257
#: ../src/ui/theme.c:238
msgid "left"
msgstr "left"
#: ../src/ui/theme.c:259
#: ../src/ui/theme.c:240
msgid "right"
msgstr "right"
#: ../src/ui/theme.c:286
#: ../src/ui/theme.c:268
#, c-format
msgid "frame geometry does not specify \"%s\" dimension"
msgstr "frame geometry does not specify \"%s\" dimension"
#: ../src/ui/theme.c:305
#: ../src/ui/theme.c:287
#, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr "frame geometry does not specify dimension \"%s\" for border \"%s\""
#: ../src/ui/theme.c:342
#: ../src/ui/theme.c:324
#, c-format
msgid "Button aspect ratio %g is not reasonable"
msgstr "Button aspect ratio %g is not reasonable"
#: ../src/ui/theme.c:354
#: ../src/ui/theme.c:336
#, c-format
msgid "Frame geometry does not specify size of buttons"
msgstr "Frame geometry does not specify size of buttons"
#: ../src/ui/theme.c:1067
#: ../src/ui/theme.c:1049
#, c-format
msgid "Gradients should have at least two colors"
msgstr "Gradients should have at least two colors"
#: ../src/ui/theme.c:1219
#: ../src/ui/theme.c:1201
#, c-format
msgid "GTK custom color specification must have color name and fallback in parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
msgstr "GTK custom color specification must have color name and fallback in parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
#: ../src/ui/theme.c:1235
#: ../src/ui/theme.c:1217
#, c-format
msgid "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-_ are valid"
msgstr "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-_ are valid"
#: ../src/ui/theme.c:1249
#: ../src/ui/theme.c:1231
#, c-format
msgid "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not fit the format"
msgstr "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not fit the format"
#: ../src/ui/theme.c:1294
#: ../src/ui/theme.c:1276
#, c-format
msgid "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
msgstr "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
#: ../src/ui/theme.c:1308
#: ../src/ui/theme.c:1290
#, c-format
msgid "GTK color specification must have a close bracket after the state, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
msgstr "GTK color specification must have a close bracket after the state, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
#: ../src/ui/theme.c:1319
#: ../src/ui/theme.c:1301
#, c-format
msgid "Did not understand state \"%s\" in color specification"
msgstr "Did not understand state \"%s\" in color specification"
#: ../src/ui/theme.c:1332
#: ../src/ui/theme.c:1314
#, c-format
msgid "Did not understand color component \"%s\" in color specification"
msgstr "Did not understand color component \"%s\" in color specification"
#: ../src/ui/theme.c:1361
#: ../src/ui/theme.c:1343
#, c-format
msgid "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the format"
msgstr "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the format"
#: ../src/ui/theme.c:1372
#: ../src/ui/theme.c:1354
#, c-format
msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "Could not parse alpha value \"%s\" in blended color"
#: ../src/ui/theme.c:1382
#: ../src/ui/theme.c:1364
#, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
#: ../src/ui/theme.c:1429
#: ../src/ui/theme.c:1411
#, c-format
msgid "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
msgstr "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
#: ../src/ui/theme.c:1440
#: ../src/ui/theme.c:1422
#, c-format
msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "Could not parse shade factor \"%s\" in shaded color"
#: ../src/ui/theme.c:1450
#: ../src/ui/theme.c:1432
#, c-format
msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "Shade factor \"%s\" in shaded color is negative"
#: ../src/ui/theme.c:1479
#: ../src/ui/theme.c:1461
#, c-format
msgid "Could not parse color \"%s\""
msgstr "Could not parse color \"%s\""
#: ../src/ui/theme.c:1790
#: ../src/ui/theme.c:1778
#, c-format
msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "Coordinate expression contains character '%s' which is not allowed"
#: ../src/ui/theme.c:1817
#: ../src/ui/theme.c:1805
#, c-format
msgid "Coordinate expression contains floating point number '%s' which could not be parsed"
msgstr "Coordinate expression contains floating point number '%s' which could not be parsed"
#: ../src/ui/theme.c:1831
#: ../src/ui/theme.c:1819
#, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr "Coordinate expression contains integer '%s' which could not be parsed"
#: ../src/ui/theme.c:1953
#: ../src/ui/theme.c:1940
#, c-format
msgid "Coordinate expression contained unknown operator at the start of this text: \"%s\""
msgstr "Coordinate expression contained unknown operator at the start of this text: \"%s\""
#: ../src/ui/theme.c:2010
#: ../src/ui/theme.c:1997
#, c-format
msgid "Coordinate expression was empty or not understood"
msgstr "Coordinate expression was empty or not understood"
#: ../src/ui/theme.c:2121
#: ../src/ui/theme.c:2131
#: ../src/ui/theme.c:2165
#: ../src/ui/theme.c:2110
#: ../src/ui/theme.c:2120
#: ../src/ui/theme.c:2154
#, c-format
msgid "Coordinate expression results in division by zero"
msgstr "Coordinate expression results in division by zero"
#: ../src/ui/theme.c:2173
#: ../src/ui/theme.c:2162
#, c-format
msgid "Coordinate expression tries to use mod operator on a floating-point number"
msgstr "Coordinate expression tries to use mod operator on a floating-point number"
#: ../src/ui/theme.c:2229
#: ../src/ui/theme.c:2218
#, c-format
msgid "Coordinate expression has an operator \"%s\" where an operand was expected"
msgstr "Coordinate expression has an operator \"%s\" where an operand was expected"
#: ../src/ui/theme.c:2238
#: ../src/ui/theme.c:2227
#, c-format
msgid "Coordinate expression had an operand where an operator was expected"
msgstr "Coordinate expression had an operand where an operator was expected"
#: ../src/ui/theme.c:2246
#: ../src/ui/theme.c:2235
#, c-format
msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "Coordinate expression ended with an operator instead of an operand"
#: ../src/ui/theme.c:2256
#: ../src/ui/theme.c:2245
#, c-format
msgid "Coordinate expression has operator \"%c\" following operator \"%c\" with no operand in between"
msgstr "Coordinate expression has operator \"%c\" following operator \"%c\" with no operand in between"
#: ../src/ui/theme.c:2407
#: ../src/ui/theme.c:2452
#: ../src/ui/theme.c:2396
#: ../src/ui/theme.c:2441
#, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr "Coordinate expression had unknown variable or constant \"%s\""
#: ../src/ui/theme.c:2506
#: ../src/ui/theme.c:2495
#, c-format
msgid "Coordinate expression parser overflowed its buffer."
msgstr "Coordinate expression parser overflowed its buffer."
#: ../src/ui/theme.c:2535
#: ../src/ui/theme.c:2524
#, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr "Coordinate expression had a close parenthesis with no open parenthesis"
#: ../src/ui/theme.c:2599
#: ../src/ui/theme.c:2588
#, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr "Coordinate expression had an open parenthesis with no close parenthesis"
#: ../src/ui/theme.c:2610
#: ../src/ui/theme.c:2599
#, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr "Coordinate expression doesn't seem to have any operators or operands"
#: ../src/ui/theme.c:2822
#: ../src/ui/theme.c:2842
#: ../src/ui/theme.c:2862
#: ../src/ui/theme.c:2812
#: ../src/ui/theme.c:2832
#: ../src/ui/theme.c:2852
#, c-format
msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "Theme contained an expression that resulted in an error: %s\n"
#: ../src/ui/theme.c:4533
#: ../src/ui/theme.c:4498
#, c-format
msgid "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be specified for this frame style"
msgstr "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be specified for this frame style"
#: ../src/ui/theme.c:5066
#: ../src/ui/theme.c:5091
#: ../src/ui/theme.c:5009
#: ../src/ui/theme.c:5034
#, c-format
msgid "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
#: ../src/ui/theme.c:5139
#: ../src/ui/theme.c:5082
#, c-format
msgid "Failed to load theme \"%s\": %s\n"
msgstr "Failed to load theme \"%s\": %s\n"
#: ../src/ui/theme.c:5275
#: ../src/ui/theme.c:5282
#: ../src/ui/theme.c:5289
#: ../src/ui/theme.c:5296
#: ../src/ui/theme.c:5303
#: ../src/ui/theme.c:5218
#: ../src/ui/theme.c:5225
#: ../src/ui/theme.c:5232
#: ../src/ui/theme.c:5239
#: ../src/ui/theme.c:5246
#, c-format
msgid "No <%s> set for theme \"%s\""
msgstr "No <%s> set for theme \"%s\""
#: ../src/ui/theme.c:5311
#: ../src/ui/theme.c:5254
#, c-format
msgid "No frame style set for window type \"%s\" in theme \"%s\", add a <window type=\"%s\" style_set=\"whatever\"/> element"
msgstr "No frame style set for window type \"%s\" in theme \"%s\", add a <window type=\"%s\" style_set=\"whatever\"/> element"
#: ../src/ui/theme.c:5709
#: ../src/ui/theme.c:5771
#: ../src/ui/theme.c:5834
#: ../src/ui/theme.c:5650
#: ../src/ui/theme.c:5712
#: ../src/ui/theme.c:5775
#, c-format
msgid "User-defined constants must begin with a capital letter; \"%s\" does not"
msgstr "User-defined constants must begin with a capital letter; \"%s\" does not"
#: ../src/ui/theme.c:5717
#: ../src/ui/theme.c:5779
#: ../src/ui/theme.c:5842
#: ../src/ui/theme.c:5658
#: ../src/ui/theme.c:5720
#: ../src/ui/theme.c:5783
#, c-format
msgid "Constant \"%s\" has already been defined"
msgstr "Constant \"%s\" has already been defined"
@ -1271,7 +1227,7 @@ msgstr "מלל לא מורשה בתג <%s>"
msgid "<%s> specified twice for this theme"
msgstr "<%s> צוין פעמיים עבור ערכת נושא זו"
#: ../src/ui/theme-parser.c:4348
#: ../src/ui/theme-parser.c:4334
#, c-format
msgid "Failed to find a valid file for theme %s\n"
msgstr "Failed to find a valid file for theme %s\n"
@ -1468,6 +1424,52 @@ msgstr "y value was %d, %d was expected"
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
#~ msgid "Comma-separated list of compositor plugins"
#~ msgstr "Comma-separated list of compositor plugins"
#~ msgid ""
#~ "Determines whether hidden windows (i.e., minimized windows and windows on "
#~ "other workspaces than the current one) should be kept alive."
#~ msgstr ""
#~ "Determines whether hidden windows (i.e., minimized windows and windows on "
#~ "other workspaces than the current one) should be kept alive."
#~ msgid "Live Hidden Windows"
#~ msgstr "Live Hidden Windows"
#~ msgid "Close Window"
#~ msgstr "סגור חלון"
#~ msgid "Window Menu"
#~ msgstr "תפריט חלון"
#~ msgid "Minimize Window"
#~ msgstr "מזער חלון"
#~ msgid "Maximize Window"
#~ msgstr "הגדל חלון"
#~ msgid "Restore Window"
#~ msgstr "שחזר חלון"
#~ msgid "Roll Up Window"
#~ msgstr "גלול חלון מעלה"
#~ msgid "Unroll Window"
#~ msgstr "בטל גלילה"
#~ msgid "Keep Window On Top"
#~ msgstr "שמור על החלון גלוי"
#~ msgid "Remove Window From Top"
#~ msgstr "בטל שמירת החלון גלוי"
#~ msgid "Always On Visible Workspace"
#~ msgstr "הראה בכל סביבות העבודה"
#~ msgid "Put Window On Only One Workspace"
#~ msgstr "הראה את החלון על סביבת עבודה אחת בלבד"
#~ msgid "Switch to workspace 1"
#~ msgstr "מעבר למרחב עבודה 1"
@ -1771,9 +1773,6 @@ msgstr "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
#~ msgid "Error setting clutter plugin list: %s\n"
#~ msgstr "ארעה שגיאה בהגדרת רשימת התוספים של clutter: %s\n"
#~ msgid "Clutter Plugins"
#~ msgstr "תוספי Clutter"
#~ msgid "Plugins to load for the Clutter-based compositing manager."
#~ msgstr "Plugins to load for the Clutter-based compositing manager."

1105
po/hu.po

File diff suppressed because it is too large Load Diff

1148
po/it.po

File diff suppressed because it is too large Load Diff

1092
po/ja.po

File diff suppressed because it is too large Load Diff

1257
po/kn.po

File diff suppressed because it is too large Load Diff

869
po/ko.po

File diff suppressed because it is too large Load Diff

1118
po/lt.po

File diff suppressed because it is too large Load Diff

1243
po/lv.po

File diff suppressed because it is too large Load Diff

392
po/nb.po
View File

@ -1,13 +1,13 @@
# Norwegian (bokmål) translation of mutter.
# Norwegian bokmål translation of mutter.
# Copyright © 2002-2004 Free Software Foundation, Inc.
# Kjartan Maraas <kmaraas@gnome.org>, 2002-2011.
# Kjartan Maraas <kmaraas@gnome.org>, 2002-2012.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter 3.3.x\n"
"Project-Id-Version: mutter 3.5.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-12-14 22:59+0100\n"
"PO-Revision-Date: 2011-12-14 22:59+0100\n"
"POT-Creation-Date: 2012-07-10 07:57+0200\n"
"PO-Revision-Date: 2012-07-10 07:58+0200\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-no@lister.ping.uio.no>\n"
"Language: \n"
@ -16,17 +16,17 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: ../src/50-mutter-windows.xml.in.h:1
msgid "Windows"
msgstr "Vinduer"
#: ../src/50-mutter-windows.xml.in.h:2
msgid "View split on left"
msgstr "Visning delt til venstre"
#: ../src/50-mutter-windows.xml.in.h:2
#: ../src/50-mutter-windows.xml.in.h:3
msgid "View split on right"
msgstr "Visning delt til høyre"
#: ../src/50-mutter-windows.xml.in.h:3
msgid "Windows"
msgstr "Vinduer"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:492
@ -36,7 +36,7 @@ msgid ""
"\"."
msgstr "En annen compositing manager kjører skjerm %i på display «%s»."
#: ../src/core/bell.c:307
#: ../src/core/bell.c:320
msgid "Bell event"
msgstr "Klokkehendelse"
@ -70,12 +70,12 @@ msgstr "_Vent"
msgid "_Force Quit"
msgstr "_Tvungen nedstenging"
#: ../src/core/display.c:361
#: ../src/core/display.c:380
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Mangler utvidelsen %s som kreves for komposittfunksjon"
#: ../src/core/display.c:427
#: ../src/core/display.c:446
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Feil under åpning av X Window System skjerm «%s»\n"
@ -89,36 +89,36 @@ msgstr ""
"Et annet program bruker allerede nøkkelen %s med modifikatorer %x som "
"binding\n"
#: ../src/core/main.c:206
#: ../src/core/main.c:196
msgid "Disable connection to session manager"
msgstr "Deaktiver tilkobling til sesjonshåndtereren"
#: ../src/core/main.c:212
#: ../src/core/main.c:202
msgid "Replace the running window manager"
msgstr "Erstatt kjørende vindushåndterer"
#: ../src/core/main.c:218
#: ../src/core/main.c:208
msgid "Specify session management ID"
msgstr "Oppgi sesjonshåndterings-ID"
#: ../src/core/main.c:223
#: ../src/core/main.c:213
msgid "X Display to use"
msgstr "X-skjerm som skal brukes"
#: ../src/core/main.c:229
#: ../src/core/main.c:219
msgid "Initialize session from savefile"
msgstr "Initier sesjonen fra en lagret fil"
#: ../src/core/main.c:235
#: ../src/core/main.c:225
msgid "Make X calls synchronous"
msgstr "Gjør X-kall synkrone"
#: ../src/core/main.c:504
#: ../src/core/main.c:494
#, c-format
msgid "Failed to scan themes directory: %s\n"
msgstr "Feil under søk i temakatalog: %s\n"
#: ../src/core/main.c:520
#: ../src/core/main.c:510
#, c-format
msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@ -126,7 +126,7 @@ msgstr ""
"Kunne ikke finne et tema! Sjekk at %s eksisterer og inneholder de vanlige "
"temaene.\n"
#: ../src/core/mutter.c:42
#: ../src/core/mutter.c:40
#, c-format
msgid ""
"mutter %s\n"
@ -140,15 +140,15 @@ msgstr ""
"Dette er fri programvare; se i kildekoden for kopibetingelser.\n"
"Det gis INGEN garanti.\n"
#: ../src/core/mutter.c:56
#: ../src/core/mutter.c:54
msgid "Print version"
msgstr "Skriv versjonsnummer"
#: ../src/core/mutter.c:62
msgid "Comma-separated list of compositor plugins"
msgstr "Kommaseparert liste av tillegg for compositor"
#: ../src/core/mutter.c:60
msgid "Mutter plugin to use"
msgstr "Mutter-tillegg som skal brukes"
#: ../src/core/prefs.c:1067
#: ../src/core/prefs.c:1065
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@ -156,12 +156,12 @@ msgstr ""
"Funksjonalitet for å gå rundt ødelagte programmer er deaktivert. Noen "
"programmer vil kanskje ikke oppføre seg korrekt.\n"
#: ../src/core/prefs.c:1142
#: ../src/core/prefs.c:1140
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Kunne ikke tolke skriftbeskrivelsen «%s» fra GSettings-nøkkel %s\n"
#: ../src/core/prefs.c:1208
#: ../src/core/prefs.c:1206
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@ -170,7 +170,7 @@ msgstr ""
"«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for endring av "
"musknapp\n"
#: ../src/core/prefs.c:1720
#: ../src/core/prefs.c:1724
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@ -179,17 +179,17 @@ msgstr ""
"«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for "
"tastaturbinding «%s»\n"
#: ../src/core/prefs.c:1817
#: ../src/core/prefs.c:1821
#, c-format
msgid "Workspace %d"
msgstr "Arbeidsområde %d"
#: ../src/core/screen.c:730
#: ../src/core/screen.c:652
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Skjerm %d på display «%s» er ugyldig\n"
#: ../src/core/screen.c:746
#: ../src/core/screen.c:668
#, c-format
msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
@ -198,19 +198,19 @@ msgstr ""
"Skjerm %d på display «%s» har allerede en vindushåndterer; prøv å bruke "
"flagget --replace for å erstatte aktiv vindushåndterer.\n"
#: ../src/core/screen.c:773
#: ../src/core/screen.c:695
#, c-format
msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
msgstr ""
"Kunne ikke hente utvalg fra vinduhåndterer på skjerm %d, display «%s»\n"
#: ../src/core/screen.c:828
#: ../src/core/screen.c:750
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Skjerm %d på display «%s» har allerede en vinduhåndterer\n"
#: ../src/core/screen.c:1013
#: ../src/core/screen.c:935
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Kunne ikke slippe skjerm %d på display «%s»\n"
@ -270,44 +270,44 @@ msgstr ""
"Disse vinduene støtter ikke &quot;lagre aktiv konfigurasjon&quot;og vil "
"måtte startes på nytt manuelt neste gang du logger inn."
#: ../src/core/util.c:111
#: ../src/core/util.c:80
#, c-format
msgid "Failed to open debug log: %s\n"
msgstr "Feil under åpning av feilsøkingslogg: %s\n"
#: ../src/core/util.c:121
#: ../src/core/util.c:90
#, c-format
msgid "Failed to fdopen() log file %s: %s\n"
msgstr "Feil under fdopen() av loggfil %s: %s\n"
#: ../src/core/util.c:127
#: ../src/core/util.c:96
#, c-format
msgid "Opened log file %s\n"
msgstr "Åpnet loggfil %s\n"
#: ../src/core/util.c:146 ../src/tools/mutter-message.c:149
#: ../src/core/util.c:115 ../src/tools/mutter-message.c:149
#, c-format
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter er kompilert uten støtte for «verbose» modus\n"
#: ../src/core/util.c:290
#: ../src/core/util.c:259
msgid "Window manager: "
msgstr "Vindushåndterer: "
#: ../src/core/util.c:438
#: ../src/core/util.c:407
msgid "Bug in window manager: "
msgstr "Feil i vindushåndterer: "
#: ../src/core/util.c:471
#: ../src/core/util.c:438
msgid "Window manager warning: "
msgstr "Advarsel fra vindushåndterer: "
#: ../src/core/util.c:499
#: ../src/core/util.c:466
msgid "Window manager error: "
msgstr "Feil i vindushåndterer: "
#. first time through
#: ../src/core/window.c:7141
#: ../src/core/window.c:7237
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@ -323,7 +323,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7804
#: ../src/core/window.c:7902
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@ -333,22 +333,22 @@ msgstr ""
"men setter minste størrelse %d x %d og maks størrelse %d x %d; dette virker "
"ikke fornuftig.\n"
#: ../src/core/window-props.c:309
#: ../src/core/window-props.c:310
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Programmet satte en feil _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:426
#: ../src/core/window-props.c:429
#, c-format
msgid "%s (on %s)"
msgstr "%s (på %s)"
#: ../src/core/window-props.c:1481
#: ../src/core/window-props.c:1484
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Ugyldig WM_TRANSIENT_FOR vindu 0x%lx oppgitt for %s.\n"
#: ../src/core/window-props.c:1492
#: ../src/core/window-props.c:1495
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR vindu 0x%lx for %s ville skapt en løkke.\n"
@ -386,81 +386,10 @@ msgid "Mutter"
msgstr "Mutter"
#: ../src/org.gnome.mutter.gschema.xml.in.h:1
msgid "Attach modal dialogs"
msgstr "Fest modale dialoger"
#: ../src/org.gnome.mutter.gschema.xml.in.h:2
msgid "Cancel tab popup"
msgstr "Avbryt tabulatordialog"
#: ../src/org.gnome.mutter.gschema.xml.in.h:3
msgid ""
"Determines whether hidden windows (i.e., minimized windows and windows on "
"other workspaces than the current one) should be kept alive."
msgstr ""
"Bestemmer om skjulte vinduer, f.eks minimerte vinduer og vinduer på andre "
"arbeidsområder enn aktivt arbeidsområde, skal holdes i live."
#: ../src/org.gnome.mutter.gschema.xml.in.h:4
msgid ""
"Determines whether the use of popup and highlight frame should be disabled "
"for window cycling."
msgstr ""
"Bestemmer om bruk av dialog og uthevingsramme skal slås av for bytting "
"mellom vinduer."
#: ../src/org.gnome.mutter.gschema.xml.in.h:5
msgid ""
"Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor."
msgstr ""
"Bestemmer om bytting mellom arbeidsområder skal skje for vinduer på alle "
"skjermer eller kun på primær skjerm."
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
msgid "Draggable border width"
msgstr "Bredde på drakant"
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Slå på kantflising ved slipp av vinduer på skjermkantene"
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
msgid ""
"If enabled, dropping windows on vertical screen edges maximizes them "
"vertically and resizes them horizontally to cover half of the available "
"area. Dropping windows on the top screen edge maximizes them completely."
msgstr ""
"Maksimerer vinduer vertikalt og endrer størrelse horisontalt slik at de "
"dekker halve det tilgjengeligeområdet hvis de slippes på vertikale "
"skjermkanter. Hvis vindu slippes på øverste kant av skjermen maksimeres de "
"fullstendig."
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
msgid "Live Hidden Windows"
msgstr "Levende skjulte vinduer"
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
msgid "Modifier to use for extended window management operations"
msgstr "Endringstast som skal brukes for utvidede vindushåndteringsoperasjoner"
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
msgid "No tab popup"
msgstr "Ingen tabulatordialog"
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
msgid "Select window from tab popup"
msgstr "Fjern vindu fra tabulatordialog"
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
msgstr ""
"Total mengde med drakant. Hvis temas synlige kanter ikke er nok vil usynlige "
"kanter legges til for å imøtekomme denne verdien."
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
#: ../src/org.gnome.mutter.gschema.xml.in.h:2
msgid ""
"This key will initiate the \"overlay\", which is a combination window "
"overview and application launching system. The default is intended to be the "
@ -472,7 +401,11 @@ msgstr ""
"tasten» på PC-maskinvare. Det forventes at denne bindingen er satt til "
"forvalg eller en tom streng."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
#: ../src/org.gnome.mutter.gschema.xml.in.h:3
msgid "Attach modal dialogs"
msgstr "Fest modale dialoger"
#: ../src/org.gnome.mutter.gschema.xml.in.h:4
msgid ""
"When true, instead of having independent titlebars, modal dialogs appear "
"attached to the titlebar of the parent window and are moved together with "
@ -482,59 +415,84 @@ msgstr ""
"tittellinjen på opphavsvinduet og flyttes sammen med dette i stedet for å ha "
"individuelle tittellinjer."
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
#: ../src/org.gnome.mutter.gschema.xml.in.h:5
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Slå på kantflising ved slipp av vinduer på skjermkantene"
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
msgid ""
"If enabled, dropping windows on vertical screen edges maximizes them "
"vertically and resizes them horizontally to cover half of the available "
"area. Dropping windows on the top screen edge maximizes them completely."
msgstr ""
"Maksimerer vinduer vertikalt og endrer størrelse horisontalt slik at de "
"dekker halve det tilgjengeligeområdet hvis de slippes på vertikale "
"skjermkanter. Hvis vindu slippes på øverste kant av skjermen maksimeres de "
"fullstendig."
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
msgid "Workspaces are managed dynamically"
msgstr "Arbeidsområder håndteres dynamisk"
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
msgid ""
"Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)."
msgstr ""
"Bestemmer om arbeidsområder skal håndteres dynamisk eller om det er et fast "
"antall arbeidsområder (bestemt av num-workspaces nøkkelen i org.gnome."
"desktop.wm.preferences)."
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
msgid "Workspaces only on primary"
msgstr "Arbeidsområder kun på primær skjerm"
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
msgid ""
"Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor."
msgstr ""
"Bestemmer om bytting mellom arbeidsområder skal skje for vinduer på alle "
"skjermer eller kun på primær skjerm."
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
msgid "No tab popup"
msgstr "Ingen tabulatordialog"
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
msgid ""
"Determines whether the use of popup and highlight frame should be disabled "
"for window cycling."
msgstr ""
"Bestemmer om bruk av dialog og uthevingsramme skal slås av for bytting "
"mellom vinduer."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Draggable border width"
msgstr "Bredde på drakant"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
msgstr ""
"Total mengde med drakant. Hvis temas synlige kanter ikke er nok vil usynlige "
"kanter legges til for å imøtekomme denne verdien."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Select window from tab popup"
msgstr "Fjern vindu fra tabulatordialog"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid "Cancel tab popup"
msgstr "Avbryt tabulatordialog"
#: ../src/tools/mutter-message.c:123
#, c-format
msgid "Usage: %s\n"
msgstr " Bruk: %s\n"
#: ../src/ui/frames.c:1157
msgid "Close Window"
msgstr "Lukk vindu"
#: ../src/ui/frames.c:1160
msgid "Window Menu"
msgstr "Vindumeny"
#: ../src/ui/frames.c:1163
msgid "Minimize Window"
msgstr "Minimer vindu"
#: ../src/ui/frames.c:1166
msgid "Maximize Window"
msgstr "Maksimer vindu"
#: ../src/ui/frames.c:1169
msgid "Restore Window"
msgstr "Gjenopprett vindu"
#: ../src/ui/frames.c:1172
msgid "Roll Up Window"
msgstr "Rull opp vindu"
#: ../src/ui/frames.c:1175
msgid "Unroll Window"
msgstr "Rull ned vindu"
#: ../src/ui/frames.c:1178
msgid "Keep Window On Top"
msgstr "Plasser vindu i forgrunnen"
#: ../src/ui/frames.c:1181
msgid "Remove Window From Top"
msgstr "Fjern vindu fra forgrunnen"
#: ../src/ui/frames.c:1184
msgid "Always On Visible Workspace"
msgstr "Alltid på synlig arbeidsområde"
#: ../src/ui/frames.c:1187
msgid "Put Window On Only One Workspace"
msgstr "Plasser vindu kun på ett arbeidsområde"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:69
msgid "Mi_nimize"
@ -734,48 +692,48 @@ msgstr "Mod5"
msgid "%d x %d"
msgstr "%d x %d"
#: ../src/ui/theme.c:253
#: ../src/ui/theme.c:234
msgid "top"
msgstr "topp"
#: ../src/ui/theme.c:255
#: ../src/ui/theme.c:236
msgid "bottom"
msgstr "bunn"
#: ../src/ui/theme.c:257
#: ../src/ui/theme.c:238
msgid "left"
msgstr "venstre"
#: ../src/ui/theme.c:259
#: ../src/ui/theme.c:240
msgid "right"
msgstr "høyre"
#: ../src/ui/theme.c:286
#: ../src/ui/theme.c:268
#, c-format
msgid "frame geometry does not specify \"%s\" dimension"
msgstr "rammegeometrien spesifiserer ikke «%s»-dimensjon"
#: ../src/ui/theme.c:305
#: ../src/ui/theme.c:287
#, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr "rammegeometri spesifiserer ikke dimensjon «%s» for kant «%s»"
#: ../src/ui/theme.c:342
#: ../src/ui/theme.c:324
#, c-format
msgid "Button aspect ratio %g is not reasonable"
msgstr "Aspektrate %g for knapp er ikke fornuftig"
#: ../src/ui/theme.c:354
#: ../src/ui/theme.c:336
#, c-format
msgid "Frame geometry does not specify size of buttons"
msgstr "Rammegeometrien spesifiserer ikke størrelse på knapper"
#: ../src/ui/theme.c:1067
#: ../src/ui/theme.c:1049
#, c-format
msgid "Gradients should have at least two colors"
msgstr "Gradienter må ha minst to farger"
#: ../src/ui/theme.c:1219
#: ../src/ui/theme.c:1201
#, c-format
msgid ""
"GTK custom color specification must have color name and fallback in "
@ -784,7 +742,7 @@ msgstr ""
"Egendefinert GTK-fargespesifikasjon må ha fargenavn og reserve i parantes, f."
"eks gtk:custom(foo,bar); kunne ikke lese «%s»"
#: ../src/ui/theme.c:1235
#: ../src/ui/theme.c:1217
#, c-format
msgid ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
@ -793,7 +751,7 @@ msgstr ""
"Ugyldig tegn «%c» i parameter color_name for gtk:custom, kun A-Za-z0-9-_ er "
"gyldig"
#: ../src/ui/theme.c:1249
#: ../src/ui/theme.c:1231
#, c-format
msgid ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
@ -802,7 +760,7 @@ msgstr ""
"Gtk:custom-format er «gtk:custom(color_name,fallback)», «%s» passer ikke i "
"formatet"
#: ../src/ui/theme.c:1294
#: ../src/ui/theme.c:1276
#, c-format
msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
@ -811,7 +769,7 @@ msgstr ""
"GTK-fargespesifikasjon må ha tilstand i klammer, f.eks. gtk:fg[NORMAL], hvor "
"NORMAL er tilstanden; kunne ikke lese «%s»"
#: ../src/ui/theme.c:1308
#: ../src/ui/theme.c:1290
#, c-format
msgid ""
"GTK color specification must have a close bracket after the state, e.g. gtk:"
@ -820,17 +778,17 @@ msgstr ""
"GTK-fargespesifikasjon må ha en avsluttende klamme etter tilstanden, f.eks. "
"gtk:fg[NORMAL], hvor NORMAL er tilstanden; kunne ikke lese «%s»"
#: ../src/ui/theme.c:1319
#: ../src/ui/theme.c:1301
#, c-format
msgid "Did not understand state \"%s\" in color specification"
msgstr "Forsto ikke tilstand «%s» i fargespesifikasjonen"
#: ../src/ui/theme.c:1332
#: ../src/ui/theme.c:1314
#, c-format
msgid "Did not understand color component \"%s\" in color specification"
msgstr "Forsto ikke fargekomponent «%s» i fargespesifikasjonen"
#: ../src/ui/theme.c:1361
#: ../src/ui/theme.c:1343
#, c-format
msgid ""
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
@ -839,56 +797,56 @@ msgstr ""
"Blandingsformat er «blend/bg_color/fg_color/alpha», «%s» passer ikke i "
"formatet"
#: ../src/ui/theme.c:1372
#: ../src/ui/theme.c:1354
#, c-format
msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "Kunne ikke lese alpha-verdi «%s» i blandet farge"
#: ../src/ui/theme.c:1382
#: ../src/ui/theme.c:1364
#, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr "Alpha-verdi «%s» i blandet farge er ikke mellom 0.0 og 1.0"
#: ../src/ui/theme.c:1429
#: ../src/ui/theme.c:1411
#, c-format
msgid ""
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
msgstr ""
"Skyggeformatet er «shade/base_color/factor», «%s» passer ikke i formatet"
#: ../src/ui/theme.c:1440
#: ../src/ui/theme.c:1422
#, c-format
msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "Kunne ikke lese skyggefaktor «%s» i skyggelagt farge"
#: ../src/ui/theme.c:1450
#: ../src/ui/theme.c:1432
#, c-format
msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "Skyggefaktor «%s» i skyggelagt farge er negativ"
#: ../src/ui/theme.c:1479
#: ../src/ui/theme.c:1461
#, c-format
msgid "Could not parse color \"%s\""
msgstr "Kunne ikke lese farge «%s»"
#: ../src/ui/theme.c:1790
#: ../src/ui/theme.c:1778
#, c-format
msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "Koordinatuttrykk inneholder tegn «%s» som ikke er tillatt"
#: ../src/ui/theme.c:1817
#: ../src/ui/theme.c:1805
#, c-format
msgid ""
"Coordinate expression contains floating point number '%s' which could not be "
"parsed"
msgstr "Koordinatuttrykk inneholder flyttall «%s» som ikke kunne tolkes"
#: ../src/ui/theme.c:1831
#: ../src/ui/theme.c:1819
#, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr "Koordinatuttrykk inneholder heltall «%s» som ikke kunne tolkes"
#: ../src/ui/theme.c:1953
#: ../src/ui/theme.c:1940
#, c-format
msgid ""
"Coordinate expression contained unknown operator at the start of this text: "
@ -897,39 +855,39 @@ msgstr ""
"Koordinatuttrykket inneholdt en ukjent operator ved begynnelsen av denne "
"teksten: «%s»"
#: ../src/ui/theme.c:2010
#: ../src/ui/theme.c:1997
#, c-format
msgid "Coordinate expression was empty or not understood"
msgstr "Koordinatuttrykket var tomt eller ble ikke forstått"
#: ../src/ui/theme.c:2121 ../src/ui/theme.c:2131 ../src/ui/theme.c:2165
#: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
#, c-format
msgid "Coordinate expression results in division by zero"
msgstr "Koordinatuttrykket resulterer i divisjon med null"
#: ../src/ui/theme.c:2173
#: ../src/ui/theme.c:2162
#, c-format
msgid ""
"Coordinate expression tries to use mod operator on a floating-point number"
msgstr "Koordinatuttrykket prøver å bruke mod-operator på et flyttall"
#: ../src/ui/theme.c:2229
#: ../src/ui/theme.c:2218
#, c-format
msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected"
msgstr "Koordinatuttrykket har en operator «%s» hvor en operand var ventet"
#: ../src/ui/theme.c:2238
#: ../src/ui/theme.c:2227
#, c-format
msgid "Coordinate expression had an operand where an operator was expected"
msgstr "Koordinatuttrykket hadde en operand hvor en operator var ventet"
#: ../src/ui/theme.c:2246
#: ../src/ui/theme.c:2235
#, c-format
msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "Koordinatuttrykket sluttet med en operator i stedet for en operand"
#: ../src/ui/theme.c:2256
#: ../src/ui/theme.c:2245
#, c-format
msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@ -938,38 +896,38 @@ msgstr ""
"Koordinatuttrykket har en operator «%c» etter en operator «%c» og ingen "
"operand mellom dem."
#: ../src/ui/theme.c:2407 ../src/ui/theme.c:2452
#: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441
#, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr "Koordinatuttrykket haddeen ukjent variabel eller konstant «%s»"
#: ../src/ui/theme.c:2506
#: ../src/ui/theme.c:2495
#, c-format
msgid "Coordinate expression parser overflowed its buffer."
msgstr "Tolkeren for koordinatuttrykk oversteg buffergrensen."
#: ../src/ui/theme.c:2535
#: ../src/ui/theme.c:2524
#, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr "Koordinatuttrykket hadde en parantes slutt uten parantes start"
#: ../src/ui/theme.c:2599
#: ../src/ui/theme.c:2588
#, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr "Koordinatuttrykket hadde en åpen parantes uten en avsluttende parantes"
#: ../src/ui/theme.c:2610
#: ../src/ui/theme.c:2599
#, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr ""
"Koordinatuttrykket ser ikke ut til å ha noen operatorer eller operander"
#: ../src/ui/theme.c:2822 ../src/ui/theme.c:2842 ../src/ui/theme.c:2862
#: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
#, c-format
msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "Tema inneholdt et uttrykk som resulterte i en feil: %s\n"
#: ../src/ui/theme.c:4533
#: ../src/ui/theme.c:4498
#, c-format
msgid ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
@ -978,25 +936,25 @@ msgstr ""
"<button function=«%s» state=«%s» draw_ops=«ett-eller-annet»/> må "
"spesifiseres for denne rammestilen"
#: ../src/ui/theme.c:5066 ../src/ui/theme.c:5091
#: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
#, c-format
msgid ""
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr ""
"Mangler <frame state=«%s» resize=«%s» focus=«%s» stil=«ett-eller-annet»/>"
#: ../src/ui/theme.c:5139
#: ../src/ui/theme.c:5082
#, c-format
msgid "Failed to load theme \"%s\": %s\n"
msgstr "Klarte ikke å laste tema «%s»: %s\n"
#: ../src/ui/theme.c:5275 ../src/ui/theme.c:5282 ../src/ui/theme.c:5289
#: ../src/ui/theme.c:5296 ../src/ui/theme.c:5303
#: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
#, c-format
msgid "No <%s> set for theme \"%s\""
msgstr "<%s> er ikke satt for tema «%s»"
#: ../src/ui/theme.c:5311
#: ../src/ui/theme.c:5254
#, c-format
msgid ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
@ -1005,14 +963,14 @@ msgstr ""
"Ingen rammestil satt for vindutype «%s» i tema «%s», legg til et <window "
"type=«%s» style_set=«ett-eller-annet»/>-element"
#: ../src/ui/theme.c:5709 ../src/ui/theme.c:5771 ../src/ui/theme.c:5834
#: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
#, c-format
msgid ""
"User-defined constants must begin with a capital letter; \"%s\" does not"
msgstr ""
"Brukerdefinerte konstanter må begynne med stor bokstav; «%s» gjør ikke det"
#: ../src/ui/theme.c:5717 ../src/ui/theme.c:5779 ../src/ui/theme.c:5842
#: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
#, c-format
msgid "Constant \"%s\" has already been defined"
msgstr "Konstant «%s» er allerede definert"
@ -1393,7 +1351,7 @@ msgstr "Ingen tekst er tillatt inne i element <%s>"
msgid "<%s> specified twice for this theme"
msgstr "<%s> spesifisert to ganger for dette temaet"
#: ../src/ui/theme-parser.c:4348
#: ../src/ui/theme-parser.c:4334
#, c-format
msgid "Failed to find a valid file for theme %s\n"
msgstr "Fant ikke en gyldig fil for tema %s\n"

1161
po/nl.po

File diff suppressed because it is too large Load Diff

1085
po/pa.po

File diff suppressed because it is too large Load Diff

754
po/pl.po

File diff suppressed because it is too large Load Diff

1057
po/pt.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1561
po/ru.po

File diff suppressed because it is too large Load Diff

416
po/sl.po
View File

@ -4,14 +4,14 @@
#
# Andraž Tori <andraz.tori1@guest.arnes.si>, 2000.
# Matjaž Horvat <m@owca.info>, 2006.
# Matej Urbančič <mateju@svn.gnome.org>, 2007 - 2011.
# Matej Urbančič <mateju@svn.gnome.org>, 2007 - 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2011-12-16 13:21+0000\n"
"PO-Revision-Date: 2011-12-16 21:47+0100\n"
"POT-Creation-Date: 2012-06-06 11:44+0000\n"
"PO-Revision-Date: 2012-06-08 21:23+0100\n"
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
"Language: \n"
@ -24,17 +24,17 @@ msgstr ""
"X-Poedit-SourceCharset: utf-8\n"
#: ../src/50-mutter-windows.xml.in.h:1
msgid "Windows"
msgstr "Okna"
#: ../src/50-mutter-windows.xml.in.h:2
msgid "View split on left"
msgstr "Poglej razdelek na levi"
#: ../src/50-mutter-windows.xml.in.h:2
#: ../src/50-mutter-windows.xml.in.h:3
msgid "View split on right"
msgstr "Poglej razdelek na desni"
#: ../src/50-mutter-windows.xml.in.h:3
msgid "Windows"
msgstr "Okna"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:492
@ -42,7 +42,7 @@ msgstr "Okna"
msgid "Another compositing manager is already running on screen %i on display \"%s\"."
msgstr "Drug upravljalnik sestavljanja je že zagnan na zaslonu %i prikaza \"%s\"."
#: ../src/core/bell.c:307
#: ../src/core/bell.c:320
msgid "Bell event"
msgstr "Dogodek zvonjenja"
@ -72,12 +72,12 @@ msgstr "_Počakaj"
msgid "_Force Quit"
msgstr "_Vsili konec"
#: ../src/core/display.c:361
#: ../src/core/display.c:380
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Manjka razširitev %s, ki je ključna za sestavljanje"
#: ../src/core/display.c:427
#: ../src/core/display.c:446
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Ni mogoče odpreti zaslona '%s' okenskega sistema X\n"
@ -88,36 +88,36 @@ msgstr "Ni mogoče odpreti zaslona '%s' okenskega sistema X\n"
msgid "Some other program is already using the key %s with modifiers %x as a binding\n"
msgstr "Tipko %s s spremenilnikom %x uporablja že nek drug program\n"
#: ../src/core/main.c:206
#: ../src/core/main.c:196
msgid "Disable connection to session manager"
msgstr "Onemogoči povezavo z upravljalnikom sej"
#: ../src/core/main.c:212
#: ../src/core/main.c:202
msgid "Replace the running window manager"
msgstr "Zamenjaj trenutni upravljalnik oken"
#: ../src/core/main.c:218
#: ../src/core/main.c:208
msgid "Specify session management ID"
msgstr "Navedite ID upravljanja seje"
#: ../src/core/main.c:223
#: ../src/core/main.c:213
msgid "X Display to use"
msgstr "Zaslon X za uporabo"
#: ../src/core/main.c:229
#: ../src/core/main.c:219
msgid "Initialize session from savefile"
msgstr "Začni sejo iz shranjene datoteke"
#: ../src/core/main.c:235
#: ../src/core/main.c:225
msgid "Make X calls synchronous"
msgstr "Uskladi klice X"
#: ../src/core/main.c:504
#: ../src/core/main.c:494
#, c-format
msgid "Failed to scan themes directory: %s\n"
msgstr "Ni mogoče preiskati mape tem: %s\n"
#: ../src/core/main.c:520
#: ../src/core/main.c:510
#, c-format
msgid "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
msgstr "Ni mogoče najti teme! Prepričajte se, da %s obstaja in vsebuje običajni zapis teme.\n"
@ -140,55 +140,55 @@ msgid "Print version"
msgstr "Izpiši različico"
#: ../src/core/mutter.c:60
msgid "Comma-separated list of compositor plugins"
msgstr "Z vejico ločen seznam vstavkov sestavljanja"
msgid "Mutter plugin to use"
msgstr "Vstavek Mutter za uporabo"
#: ../src/core/prefs.c:1067
#: ../src/core/prefs.c:1064
msgid "Workarounds for broken applications disabled. Some applications may not behave properly.\n"
msgstr "Obhodi za pokvarjene programe so onemogočeni. Nekateri programi se morda ne bodo odzivali na pričakovan način.\n"
#: ../src/core/prefs.c:1142
#: ../src/core/prefs.c:1139
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Ni mogoče razčleniti opisa pisave \"%s\" iz ključa GSettings %s\n"
#: ../src/core/prefs.c:1208
#: ../src/core/prefs.c:1205
#, c-format
msgid "\"%s\" found in configuration database is not a valid value for mouse button modifier\n"
msgstr "\"%s\", najden v podatkovni zbirki nastavitev, ni veljaven spremenilnik za miškine gumbe.\n"
#: ../src/core/prefs.c:1720
#: ../src/core/prefs.c:1723
#, c-format
msgid "\"%s\" found in configuration database is not a valid value for keybinding \"%s\"\n"
msgstr "\"%s\", najden v podatkovni zbirki nastavitev, ni veljaven ključ za tipkovno bližnjico \"%s\"\n"
# G:1 K:0 O:0
#: ../src/core/prefs.c:1817
#: ../src/core/prefs.c:1820
#, c-format
msgid "Workspace %d"
msgstr "Delovna površina %d"
#: ../src/core/screen.c:730
#: ../src/core/screen.c:652
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Zaslon %d na prikazu '%s' ni veljaven\n"
#: ../src/core/screen.c:746
#: ../src/core/screen.c:668
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager; try using the --replace option to replace the current window manager.\n"
msgstr "Zaslon %d na prikazu \"%s\" je že upravljan z upravljalnikom oken; poskušajte uporabiti možnost --replace za zamenjavo trenutnega.\n"
#: ../src/core/screen.c:773
#: ../src/core/screen.c:695
#, c-format
msgid "Could not acquire window manager selection on screen %d display \"%s\"\n"
msgstr "Ni mogoče dobiti izbire upravljalnika oken na zaslonu %d prikaza \"%s\"\n"
#: ../src/core/screen.c:828
#: ../src/core/screen.c:750
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Zaslon %d na prikazu \"%s\" je že upravljan z upravljalnikom oken\n"
#: ../src/core/screen.c:1013
#: ../src/core/screen.c:935
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Ni mogoče opustiti zaslona %d na prikazu \"%s\"\n"
@ -249,46 +249,46 @@ msgstr "Neznan predmet %s"
msgid "These windows do not support &quot;save current setup&quot; and will have to be restarted manually next time you log in."
msgstr "Ta okna ne podpirajo možnosti &quot;shranjevanja trenutnih nastavitev&quot;, zato jih bo treba ob naslednji prijavi zagnati ročno."
#: ../src/core/util.c:111
#: ../src/core/util.c:80
#, c-format
msgid "Failed to open debug log: %s\n"
msgstr "Napaka med odpiranjem dnevnika razhroščevanja: %s\n"
#: ../src/core/util.c:121
#: ../src/core/util.c:90
#, c-format
msgid "Failed to fdopen() log file %s: %s\n"
msgstr "Napaka ukaza fdopen() dnevniške datoteke %s: %s\n"
#: ../src/core/util.c:127
#: ../src/core/util.c:96
#, c-format
msgid "Opened log file %s\n"
msgstr "Odprta dnevniška datoteka %s\n"
#: ../src/core/util.c:146
#: ../src/core/util.c:115
#: ../src/tools/mutter-message.c:149
#, c-format
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Program Mutter je kodno preveden brez podpore za podrobni način izpisovanja\n"
#: ../src/core/util.c:290
#: ../src/core/util.c:259
msgid "Window manager: "
msgstr "Upravljalnik oken: "
# G:4 K:0 O:0
#: ../src/core/util.c:438
#: ../src/core/util.c:407
msgid "Bug in window manager: "
msgstr "Hrošč v upravljalniku oken: "
#: ../src/core/util.c:471
#: ../src/core/util.c:438
msgid "Window manager warning: "
msgstr "Opozorilo upravljalnika oken: "
#: ../src/core/util.c:499
#: ../src/core/util.c:466
msgid "Window manager error: "
msgstr "Napaka upravljalnika oken: "
#. first time through
#: ../src/core/window.c:7180
#: ../src/core/window.c:7234
#, c-format
msgid "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER window as specified in the ICCCM.\n"
msgstr "Okno %s nastavi svoj SM_CLIENT_ID, namesto, da bi nastavilo WM_CLIENT_LEADER kot je zavedeno v ICCCM.\n"
@ -300,27 +300,27 @@ msgstr "Okno %s nastavi svoj SM_CLIENT_ID, namesto, da bi nastavilo WM_CLIENT_LE
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7843
#: ../src/core/window.c:7899
#, c-format
msgid "Window %s sets an MWM hint indicating it isn't resizable, but sets min size %d x %d and max size %d x %d; this doesn't make much sense.\n"
msgstr "Okno %s določi namig MWM, ki pove, da ni mogoče spremeniti velikosti, hkrati pa določi najmanjšo velikost na %d x %d in največjo na %d x %d; vrednost ni smiselna.\n"
#: ../src/core/window-props.c:309
#: ../src/core/window-props.c:310
#, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Program je nastavil pokvarjen _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:426
#: ../src/core/window-props.c:429
#, c-format
msgid "%s (on %s)"
msgstr "%s (na %s)"
#: ../src/core/window-props.c:1481
#: ../src/core/window-props.c:1484
#, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Neveljaven WM_TRANSIENT_FOR za okno 0x%lx naveden za %s.\n"
#: ../src/core/window-props.c:1492
#: ../src/core/window-props.c:1495
#, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "Predmet WM_TRANSIENT_FOR okna 0x%lx za %s lahko ustvari zanko.\n"
@ -356,122 +356,74 @@ msgid "Mutter"
msgstr "Mutter"
#: ../src/org.gnome.mutter.gschema.xml.in.h:1
msgid "Modifier to use for extended window management operations"
msgstr "Spremenilnik, ki naj se uporabi za upravljanje oken"
#: ../src/org.gnome.mutter.gschema.xml.in.h:2
msgid "This key will initiate the \"overlay\", which is a combination window overview and application launching system. The default is intended to be the \"Windows key\" on PC hardware. It's expected that this binding either the default or set to the empty string."
msgstr "Ta vrednost določa \"prevleko\", ki združuje predogled okna in zaganjalnik programa. Vrednost je zamišljena kot \"ključ oken\" na strojni opremi računalnika. Pričakovano je, da je vrednost določena privzeto ali pa ni določena."
#: ../src/org.gnome.mutter.gschema.xml.in.h:3
msgid "Attach modal dialogs"
msgstr "Pripni modalna pogovorna okna"
#: ../src/org.gnome.mutter.gschema.xml.in.h:2
msgid "Cancel tab popup"
msgstr "Prekliči pojavni zavihek"
#: ../src/org.gnome.mutter.gschema.xml.in.h:3
msgid "Determines whether hidden windows (i.e., minimized windows and windows on other workspaces than the current one) should be kept alive."
msgstr "Določa ali naj se skrita okna (skrčena okna in okna na drugih delovnih površinah) ohranjajo odprta."
#: ../src/org.gnome.mutter.gschema.xml.in.h:4
msgid "Determines whether the use of popup and highlight frame should be disabled for window cycling."
msgstr "Določa ali naj bo uporaba pojavnih zavihkov in poudarjanja onemogočena med kroženjem oken."
msgid "When true, instead of having independent titlebars, modal dialogs appear attached to the titlebar of the parent window and are moved together with the parent window."
msgstr "Izbrana možnost omogoči, da je namesto samostojnih nazivnih vrstic, na to mesto pripeto modalno pogovorno okno, ki se premika z nadrejenim oknom."
#: ../src/org.gnome.mutter.gschema.xml.in.h:5
msgid "Determines whether workspace switching should happen for windows on all monitors or only for windows on the primary monitor."
msgstr "Določa ali naj se delovne površine preklapljajo na vseh zaslonih ali le na prvem, glavnem zaslonu."
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
msgid "Draggable border width"
msgstr "Prilagodljiva obroba pravokotnika"
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Omogoči prilagajanje velikosti okna ob dotiku robov zaslona"
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
msgid "If enabled, dropping windows on vertical screen edges maximizes them vertically and resizes them horizontally to cover half of the available area. Dropping windows on the top screen edge maximizes them completely."
msgstr "Izbrana možnost omogoča, da se okna, ki se dotaknejo navpičnih robov zaslona razpeta po navpični osi in razširjena na polovično širino. Dotik vrhnjega roba razpne okno čez cel zaslon."
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
msgid "Workspaces are managed dynamically"
msgstr "Število delovnih površin je spremenljivo"
#: ../src/org.gnome.mutter.gschema.xml.in.h:8
msgid "Determines whether workspaces are managed dynamically or whether there's a static number of workspaces (determined by the num-workspaces key in org.gnome.desktop.wm.preferences)."
msgstr "Možnost določa ali je število delovnih površin spremenljivo ali pa je to število stalno (določenih s ključem števila delovnih površin med možnostmi v org.gnome.desktop.wm.preferences)."
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
msgid "Live Hidden Windows"
msgstr "Ohranjena skrita okna"
msgid "Workspaces only on primary"
msgstr "Delovne površine le na prvem zaslonu"
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
msgid "Modifier to use for extended window management operations"
msgstr "Spremenilnik, ki naj se uporabi za upravljanje oken"
msgid "Determines whether workspace switching should happen for windows on all monitors or only for windows on the primary monitor."
msgstr "Določa ali naj se delovne površine preklapljajo na vseh zaslonih ali le na prvem, glavnem zaslonu."
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
msgid "No tab popup"
msgstr "Brez pojavnih zavihkov"
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
msgid "Select window from tab popup"
msgstr "Izbor okna iz pojavnega zavihka"
msgid "Determines whether the use of popup and highlight frame should be disabled for window cycling."
msgstr "Določa ali naj bo uporaba pojavnih zavihkov in poudarjanja onemogočena med kroženjem oken."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "Draggable border width"
msgstr "Prilagodljiva obroba pravokotnika"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid "The amount of total draggable borders. If the theme's visible borders are not enough, invisible borders will be added to meet this value."
msgstr "Delež skupne prilagodljive obrobe. V kolikor vidni robovi teme niso dovolj, so dodane nevidne obrobe, za dodatno prilagajanje."
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid "This key will initiate the \"overlay\", which is a combination window overview and application launching system. The default is intended to be the \"Windows key\" on PC hardware. It's expected that this binding either the default or set to the empty string."
msgstr "Ta vrednost določa \"prevleko\", ki združuje predogled okna in zaganjalnik programa. Vrednost je zamišljena kot \"ključ oken\" na strojni opremi računalnika. Pričakovano je, da je vrednost določena privzeto ali pa ni določena."
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "When true, instead of having independent titlebars, modal dialogs appear attached to the titlebar of the parent window and are moved together with the parent window."
msgstr "Izbrana možnost omogoči, da je namesto samostojnih nazivnih vrstic, na to mesto pripeto modalno pogovorno okno, ki se premika z nadrejenim oknom."
msgid "Select window from tab popup"
msgstr "Izbor okna iz pojavnega zavihka"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid "Workspaces only on primary"
msgstr "Delovne površine le na prvem zaslonu"
msgid "Cancel tab popup"
msgstr "Prekliči pojavni zavihek"
#: ../src/tools/mutter-message.c:123
#, c-format
msgid "Usage: %s\n"
msgstr "Uporaba: %s\n"
#: ../src/ui/frames.c:1157
msgid "Close Window"
msgstr "Zapri okno"
# G:1 K:1 O:0
#: ../src/ui/frames.c:1160
msgid "Window Menu"
msgstr "Meni okna"
# G:0 K:1 O:0
#: ../src/ui/frames.c:1163
msgid "Minimize Window"
msgstr "Skrči okno"
#: ../src/ui/frames.c:1166
msgid "Maximize Window"
msgstr "Razpni okno"
#: ../src/ui/frames.c:1169
msgid "Restore Window"
msgstr "Obnovi okno"
# G:2 K:0 O:0
#: ../src/ui/frames.c:1172
msgid "Roll Up Window"
msgstr "Zavij okno"
#: ../src/ui/frames.c:1175
msgid "Unroll Window"
msgstr "Odvij okno"
#: ../src/ui/frames.c:1178
msgid "Keep Window On Top"
msgstr "Ohrani okno na vrhu"
#: ../src/ui/frames.c:1181
msgid "Remove Window From Top"
msgstr "Odstrani okno z vrha"
# G:1 K:0 O:0
#: ../src/ui/frames.c:1184
msgid "Always On Visible Workspace"
msgstr "Vedno na vidni delovni površini"
#: ../src/ui/frames.c:1187
msgid "Put Window On Only One Workspace"
msgstr "Postavi okno na samo eno delovno površino"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:69
msgid "Mi_nimize"
@ -690,251 +642,251 @@ msgstr "Mod5"
msgid "%d x %d"
msgstr "%d x %d"
#: ../src/ui/theme.c:253
#: ../src/ui/theme.c:234
msgid "top"
msgstr "zgoraj"
# G:12 K:5 O:0
#: ../src/ui/theme.c:255
#: ../src/ui/theme.c:236
msgid "bottom"
msgstr "spodaj"
# G:10 K:4 O:0
#: ../src/ui/theme.c:257
#: ../src/ui/theme.c:238
msgid "left"
msgstr "levo"
# G:1 K:0 O:0
#: ../src/ui/theme.c:259
#: ../src/ui/theme.c:240
msgid "right"
msgstr "desno"
# G:1 K:0 O:0
#: ../src/ui/theme.c:286
#: ../src/ui/theme.c:268
#, c-format
msgid "frame geometry does not specify \"%s\" dimension"
msgstr "geometrija okvirja ne navaja dimenzije \"%s\""
#: ../src/ui/theme.c:305
#: ../src/ui/theme.c:287
#, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr "geometrija okvirja ne navaja dimenzije \"%s\" za rob \"%s\""
#: ../src/ui/theme.c:342
#: ../src/ui/theme.c:324
#, c-format
msgid "Button aspect ratio %g is not reasonable"
msgstr "Vrednost razmerja gumba %g ni smiselna"
#: ../src/ui/theme.c:354
#: ../src/ui/theme.c:336
#, c-format
msgid "Frame geometry does not specify size of buttons"
msgstr "Geometrija okvirja ne navaja velikosti gumbov"
#: ../src/ui/theme.c:1067
#: ../src/ui/theme.c:1049
#, c-format
msgid "Gradients should have at least two colors"
msgstr "Prelivi bi morali imeti vsaj dve barvi"
#: ../src/ui/theme.c:1219
#: ../src/ui/theme.c:1201
#, c-format
msgid "GTK custom color specification must have color name and fallback in parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
msgstr "Navedba barve GTK mora biti opredeljena z imenom barve in v navednicah povrnjeno barvo , npr. gtk:izbirno(ime_barve,povrnjena_barva); ni mogoče razčleniti \"%s\""
#: ../src/ui/theme.c:1235
#: ../src/ui/theme.c:1217
#, c-format
msgid "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-_ are valid"
msgstr "Neveljaven znak '%c' v imenu barve gtk:izbirno; dovoljeni znaki so le A-Za-z0-9-_."
#: ../src/ui/theme.c:1249
#: ../src/ui/theme.c:1231
#, c-format
msgid "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not fit the format"
msgstr "Gtk:zapis po meri \"gtk:izbirno(ime_barve,povrnjena_barva)\", \"%s\" ne ustreza pravilni obliki."
#: ../src/ui/theme.c:1294
#: ../src/ui/theme.c:1276
#, c-format
msgid "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
msgstr "Navedba barve GTK mora vsebovati stanje v oglatih oklepajih, npr. gtk:fg[NORMAL], kjer je NORMAL stanje; ni mogoče razčleniti \"%s\""
#: ../src/ui/theme.c:1308
#: ../src/ui/theme.c:1290
#, c-format
msgid "GTK color specification must have a close bracket after the state, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
msgstr "Navedbi barve GTK manjka oglati zaklepaj za stanjem, npr. gtk:fg[NORMAL], kjer je NORMAL stanje; ni mogoče razčleniti \"%s\""
#: ../src/ui/theme.c:1319
#: ../src/ui/theme.c:1301
#, c-format
msgid "Did not understand state \"%s\" in color specification"
msgstr "Ni mogoče razumeti stanja \"%s\" v navedbi barve "
#: ../src/ui/theme.c:1332
#: ../src/ui/theme.c:1314
#, c-format
msgid "Did not understand color component \"%s\" in color specification"
msgstr "Ni mogoče razumeti barvne komponente \"%s\" v navedbi barve"
#: ../src/ui/theme.c:1361
#: ../src/ui/theme.c:1343
#, c-format
msgid "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the format"
msgstr "Oblika zapisa preliva je \"blend/bg_color/fg_color/alpha\", \"%s\" ne ustreza pravilni obliki"
#: ../src/ui/theme.c:1372
#: ../src/ui/theme.c:1354
#, c-format
msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "V prelivni barvi ni mogoče razčleniti vrednosti alfa \"%s\""
#: ../src/ui/theme.c:1382
#: ../src/ui/theme.c:1364
#, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr "V prelivni barvi alfa vrednost \"%s\" ni med 0.0 in 1.0"
#: ../src/ui/theme.c:1429
#: ../src/ui/theme.c:1411
#, c-format
msgid "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
msgstr "Oblika zapisa barve senčenja je \"shade/base_color/factor\", \"%s\" ne ustreza pravilni obliki."
#: ../src/ui/theme.c:1440
#: ../src/ui/theme.c:1422
#, c-format
msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "Ni mogoče razčleniti vrednosti senčenja \"%s\" v senčeni barvi"
#: ../src/ui/theme.c:1450
#: ../src/ui/theme.c:1432
#, c-format
msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "V senčeni barvi je vrednost senčenja \"%s\" negativna"
#: ../src/ui/theme.c:1479
#: ../src/ui/theme.c:1461
#, c-format
msgid "Could not parse color \"%s\""
msgstr "Ni mogoče razčleniti barve \"%s\""
#: ../src/ui/theme.c:1790
#: ../src/ui/theme.c:1778
#, c-format
msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "Izraz koordinat vsebuje znak '%s', ki pa ni dovoljen"
#: ../src/ui/theme.c:1817
#: ../src/ui/theme.c:1805
#, c-format
msgid "Coordinate expression contains floating point number '%s' which could not be parsed"
msgstr "Izraz koordinat vsebuje številko s plavajočo vejico '%s', ki je ni mogoče razčleniti"
#: ../src/ui/theme.c:1831
#: ../src/ui/theme.c:1819
#, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr "Izraz koordinat vsebuje celo število '%s', ki ga ni mogoče razčleniti"
#: ../src/ui/theme.c:1953
#: ../src/ui/theme.c:1940
#, c-format
msgid "Coordinate expression contained unknown operator at the start of this text: \"%s\""
msgstr "Izraz koordinat vsebuje neznan operator na začetku besedila: \"%s\""
#: ../src/ui/theme.c:2010
#: ../src/ui/theme.c:1997
#, c-format
msgid "Coordinate expression was empty or not understood"
msgstr "Izraz koordinat je prazen ali pa ni v razumljivem zapisu"
#: ../src/ui/theme.c:2121
#: ../src/ui/theme.c:2131
#: ../src/ui/theme.c:2165
#: ../src/ui/theme.c:2110
#: ../src/ui/theme.c:2120
#: ../src/ui/theme.c:2154
#, c-format
msgid "Coordinate expression results in division by zero"
msgstr "Izraz koordinat povzroči deljenje z vrednostjo nič"
#: ../src/ui/theme.c:2173
#: ../src/ui/theme.c:2162
#, c-format
msgid "Coordinate expression tries to use mod operator on a floating-point number"
msgstr "Izraz koordinat poskuša uporabiti operator mod ali številko s plavajočo vejico"
#: ../src/ui/theme.c:2229
#: ../src/ui/theme.c:2218
#, c-format
msgid "Coordinate expression has an operator \"%s\" where an operand was expected"
msgstr "Izraz koordinat vsebuje operator \"%s\", kjer je pričakovan operand"
#: ../src/ui/theme.c:2238
#: ../src/ui/theme.c:2227
#, c-format
msgid "Coordinate expression had an operand where an operator was expected"
msgstr "Izraz koordinat vsebuje operand kjer je pričakovan operator"
#: ../src/ui/theme.c:2246
#: ../src/ui/theme.c:2235
#, c-format
msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "Izraz koordinat se konča z operatorjem namesto z operandom"
#: ../src/ui/theme.c:2256
#: ../src/ui/theme.c:2245
#, c-format
msgid "Coordinate expression has operator \"%c\" following operator \"%c\" with no operand in between"
msgstr "Izraz koordinat vsebuje operator \"%c\", ki sledi operatorju \"%c\", brez vmesnega operanda"
#: ../src/ui/theme.c:2407
#: ../src/ui/theme.c:2452
#: ../src/ui/theme.c:2396
#: ../src/ui/theme.c:2441
#, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr "Izraz koordinat vsebuje neznano spremenljivko ali konstanto \"%s\""
#: ../src/ui/theme.c:2506
#: ../src/ui/theme.c:2495
#, c-format
msgid "Coordinate expression parser overflowed its buffer."
msgstr "Razčlenjevalnik izrazov koordinat je preplavil medpomnilnik."
#: ../src/ui/theme.c:2535
#: ../src/ui/theme.c:2524
#, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr "Izraz koordinat vsebuje zaklepaj, ne pa tudi uklepaja"
#: ../src/ui/theme.c:2599
#: ../src/ui/theme.c:2588
#, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr "Izraz koordinat vsebuje uklepaj, vendar je brez zaklepaja"
#: ../src/ui/theme.c:2610
#: ../src/ui/theme.c:2599
#, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr "Videti je, da izraz koordinat ne vsebuje operatorjev ali operandov"
#: ../src/ui/theme.c:2822
#: ../src/ui/theme.c:2842
#: ../src/ui/theme.c:2862
#: ../src/ui/theme.c:2812
#: ../src/ui/theme.c:2832
#: ../src/ui/theme.c:2852
#, c-format
msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "Tema vsebuje izraz, ki povzroča napako: %s\n"
#: ../src/ui/theme.c:4533
#: ../src/ui/theme.c:4498
#, c-format
msgid "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be specified for this frame style"
msgstr "Za ta slog okvirja mora biti naveden <button function=\"%s\" state=\"%s\" draw_ops=\"karkoli\"/>"
#: ../src/ui/theme.c:5066
#: ../src/ui/theme.c:5091
#: ../src/ui/theme.c:5009
#: ../src/ui/theme.c:5034
#, c-format
msgid "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr "Manjka <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"karkoli\"/>"
#: ../src/ui/theme.c:5139
#: ../src/ui/theme.c:5082
#, c-format
msgid "Failed to load theme \"%s\": %s\n"
msgstr "Napaka med nalaganjem teme \"%s\": %s\n"
#: ../src/ui/theme.c:5275
#: ../src/ui/theme.c:5282
#: ../src/ui/theme.c:5289
#: ../src/ui/theme.c:5296
#: ../src/ui/theme.c:5303
#: ../src/ui/theme.c:5218
#: ../src/ui/theme.c:5225
#: ../src/ui/theme.c:5232
#: ../src/ui/theme.c:5239
#: ../src/ui/theme.c:5246
#, c-format
msgid "No <%s> set for theme \"%s\""
msgstr "Ni nastavljena vrednost <%s> za temo \"%s\""
#: ../src/ui/theme.c:5311
#: ../src/ui/theme.c:5254
#, c-format
msgid "No frame style set for window type \"%s\" in theme \"%s\", add a <window type=\"%s\" style_set=\"whatever\"/> element"
msgstr "Ni določenega sloga okvirja okna vrste \"%s\" v temi \"%s\". Dodajte predmet <window type=\"%s\" style_set=\"whatever\"/>"
#: ../src/ui/theme.c:5709
#: ../src/ui/theme.c:5771
#: ../src/ui/theme.c:5834
#: ../src/ui/theme.c:5650
#: ../src/ui/theme.c:5712
#: ../src/ui/theme.c:5775
#, c-format
msgid "User-defined constants must begin with a capital letter; \"%s\" does not"
msgstr "Uporabniško določene konstante se morajo začeti z veliko črko; vrednost \"%s\" se ne"
#: ../src/ui/theme.c:5717
#: ../src/ui/theme.c:5779
#: ../src/ui/theme.c:5842
#: ../src/ui/theme.c:5658
#: ../src/ui/theme.c:5720
#: ../src/ui/theme.c:5783
#, c-format
msgid "Constant \"%s\" has already been defined"
msgstr "Konstanta \"%s\" je že določena"
@ -1306,7 +1258,7 @@ msgstr "Znotraj predmeta <%s> besedilo ni dovoljeno"
msgid "<%s> specified twice for this theme"
msgstr "Vrednost <%s> je za to temo navedena dvakrat"
#: ../src/ui/theme-parser.c:4348
#: ../src/ui/theme-parser.c:4334
#, c-format
msgid "Failed to find a valid file for theme %s\n"
msgstr "Ni mogoče najti veljavne datoteke za temo %s\n"
@ -1503,84 +1455,18 @@ msgstr "vrednost y je %d, pričakovana pa je %d"
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr "%d izjav koordinat razčlenjenih v %g sekundah (%g sekund v povprečju)\n"
#~ msgid "Switch to workspace 1"
#~ msgstr "Preklopi na delovno površino 1"
#~ msgid "Comma-separated list of compositor plugins"
#~ msgstr "Z vejico ločen seznam vstavkov sestavljanja"
#~ msgid "Switch to workspace 2"
#~ msgstr "Preklopi na delovno površino 2"
#~ msgid "Switch to workspace 3"
#~ msgstr "Preklopi na delovno površino 3"
#~ msgid "Switch to workspace 4"
#~ msgstr "Preklopi na delovno površino 4"
#~ msgid "Switch to workspace 5"
#~ msgstr "Preklopi na delovno površino 5"
#~ msgid "Switch to workspace 6"
#~ msgstr "Preklopi na delovno površino 6"
#~ msgid "Switch to workspace 7"
#~ msgstr "Preklopi na delovno površino 7"
#~ msgid "Switch to workspace 8"
#~ msgstr "Preklopi na delovno površino 8"
#~ msgid "Switch to workspace 9"
#~ msgstr "Preklopi na delovno površino 9"
#~ msgid "Switch to workspace 10"
#~ msgstr "Preklopi na delovno površino 10"
#~ msgid "Switch to workspace 11"
#~ msgstr "Preklopi na delovno površino 11"
#~ msgid "Switch to workspace 12"
#~ msgstr "Preklopi na delovno površino 12"
#~ msgid "Switch to workspace on the left of the current workspace"
#~ msgstr "Preklopi na delovno površino na levi od trenutne delovne površine"
#~ msgid "Switch to workspace on the right of the current workspace"
#~ msgstr "Preklopi na delovno površino na desni od trenutne delovne površine"
#~ msgid "Switch to workspace above the current workspace"
#~ msgstr "Preklopi na delovno površino nad trenutno delovno površino"
#~ msgid "Switch to workspace below the current workspace"
#~ msgstr "Preklopi na delovno površino pod trenutno delovno površino"
#~ msgid "Move between windows of an application, using a popup window"
#~ msgstr "Premakni med okni programa s pojavnim oknom"
#~ msgid "Live Hidden Windows"
#~ msgstr "Ohranjena skrita okna"
#~ msgid ""
#~ "Move backward between windows of an application, using a popup window"
#~ msgstr "Premakni nazaj med okni programa s pojavnim oknom"
#~ "Determines whether hidden windows (i.e., minimized windows and windows on "
#~ "other workspaces than the current one) should be kept alive."
#~ msgstr ""
#~ "Določa ali naj se skrita okna (skrčena okna in okna na drugih delovnih "
#~ "površinah) ohranjajo odprta."
#~ msgid "Move between windows, using a popup window"
#~ msgstr "Premakni med okni s pojavnim oknom"
#~ msgid "Move backward between windows, using a popup window"
#~ msgstr "Premakni nazaj med okni s pojavnim oknom"
#~ msgid "Move between panels and the desktop, using a popup window"
#~ msgstr "Premakni med pulti in namizjem s pojavnim oknom"
#~ msgid "Move backward between panels and the desktop, using a popup window"
#~ msgstr "Premakni nazaj med pulti in namizjem s pojavnim oknom"
#~ msgid "Move between windows of an application immediately"
#~ msgstr "Takoj premakni med okni programa"
#~ msgid "Move backward between windows of an application immediately"
#~ msgstr "Takoj premakni nazaj med okni programa"
#~ msgid "Move between windows immediately"
#~ msgstr "Takoj premakni med okni"
#~ msgid "Move backward between windows immediately"
#~ msgstr "Takoj premakni nazaj med okni"
#~ msgid "Move between panels and the desktop immediately"
#~ msgstr "Takoj premakni med pulti in namizjem"
#~ msgid "Close Window"
#~ msgstr "Zapri okno"

1045
po/sr.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1066
po/sv.po

File diff suppressed because it is too large Load Diff

940
po/ta.po

File diff suppressed because it is too large Load Diff

1648
po/te.po

File diff suppressed because it is too large Load Diff

266
po/tr.po
View File

@ -6,14 +6,14 @@
# Baris Cicek <baris@teamforce.name.tr>, 2004, 2005, 2008, 2009.
# İlker DAĞLI <ilker@ilkerdagli.info>, 2011.
# Muhammed EKEN <gnome@m-eken.com>, 2011.
# Muhammet Kara <muhammet.k@gmail.com>, 2011.
# Muhammet Kara <muhammet.k@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2011-12-13 13:41+0000\n"
"PO-Revision-Date: 2011-12-24 16:54+0200\n"
"POT-Creation-Date: 2012-03-15 21:29+0000\n"
"PO-Revision-Date: 2012-03-23 21:56+0000\n"
"Last-Translator: Muhammet Kara <muhammet.k@gmail.com>\n"
"Language-Team: Turkish <gnome-turk@gnome.org>\n"
"MIME-Version: 1.0\n"
@ -24,18 +24,17 @@ msgstr ""
"Language: tr\n"
#: ../src/50-mutter-windows.xml.in.h:1
msgid "Windows"
msgstr "Pencereler"
#: ../src/50-mutter-windows.xml.in.h:2
msgid "View split on left"
msgstr "Solda bölünmüş olarak göster"
#: ../src/50-mutter-windows.xml.in.h:2
#: ../src/50-mutter-windows.xml.in.h:3
msgid "View split on right"
msgstr "Sağda bölünmüş olarak göster"
#: ../src/50-mutter-windows.xml.in.h:3
#| msgid "_Windows"
msgid "Windows"
msgstr "Pencereler"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:492
@ -81,12 +80,12 @@ msgstr "_Bekle"
msgid "_Force Quit"
msgstr "_Sonlandır"
#: ../src/core/display.c:365
#: ../src/core/display.c:387
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Kompozisyon için gerekli olan %s eklentisi eksik"
#: ../src/core/display.c:431
#: ../src/core/display.c:453
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "X Pencere Sistemi '%s' ekranıılamadı\n"
@ -137,7 +136,7 @@ msgstr ""
"Hiç tema bulunamadı! %s varlığından ve bildiğimiz temaları içerdiğinden emin "
"olun.\n"
#: ../src/core/mutter.c:42
#: ../src/core/mutter.c:40
#, c-format
msgid ""
"mutter %s\n"
@ -151,15 +150,15 @@ msgstr ""
"Bu bir özgür yazılımdır; telif koşullarını öğrenmek için kaynak koda bakın.\n"
"Hiç bir garantisi, BELİRLİ BİR AMACA UYGUNLUĞU için dahi, YOKTUR.\n"
#: ../src/core/mutter.c:56
#: ../src/core/mutter.c:54
msgid "Print version"
msgstr "Sürümü yazdır"
#: ../src/core/mutter.c:62
#: ../src/core/mutter.c:60
msgid "Comma-separated list of compositor plugins"
msgstr "Kompozisyon eklentilerinin listesi (virgül ile ayrılmış)"
#: ../src/core/prefs.c:1067
#: ../src/core/prefs.c:1077
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@ -167,14 +166,13 @@ msgstr ""
"Hatalı uygulamalara yönelik çözümler devre dışı. Bazı uygulamalar düzgün "
"işlemeyebilir.\n"
#: ../src/core/prefs.c:1142
#: ../src/core/prefs.c:1152
#, c-format
#| msgid "Could not parse font description \"%s\" from GConf key %s\n"
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr ""
"\"%s\" yazıtipi tanımlaması, %s GSettings anahtarından ayrıştırılamadı\n"
#: ../src/core/prefs.c:1208
#: ../src/core/prefs.c:1218
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@ -183,7 +181,7 @@ msgstr ""
"Yapılandırma veritabanında bulunan \"%s\", fare düğme düzenleyicisi olarak "
"geçerli bir değer değil\n"
#: ../src/core/prefs.c:1720
#: ../src/core/prefs.c:1739
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@ -192,17 +190,17 @@ msgstr ""
"Yapılandırma veritabanında bulunan \"%s\", \"%s\" tuş bağı olarak geçerli "
"bir değer değil\n"
#: ../src/core/prefs.c:1817
#: ../src/core/prefs.c:1836
#, c-format
msgid "Workspace %d"
msgstr "Çalışma Alanı %d"
#: ../src/core/screen.c:741
#: ../src/core/screen.c:730
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "'%2$s' X oturumundaki ekran %1$d geçersiz\n"
#: ../src/core/screen.c:757
#: ../src/core/screen.c:746
#, c-format
msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --"
@ -212,7 +210,7 @@ msgstr ""
"geçerli pencere yöneticisinin yerine bir başkasını koymak için --replace "
"seçeneğini kullanmayı deneyin.\n"
#: ../src/core/screen.c:784
#: ../src/core/screen.c:773
#, c-format
msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n"
@ -220,13 +218,13 @@ msgstr ""
"\"%2$s\" X oturumundaki ekran %1$d hangi pencere yöneticisine "
"sahipöğrenilemedi\n"
#: ../src/core/screen.c:839
#: ../src/core/screen.c:828
#, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr ""
"\"%2$s\" X oturumundaki ekran %1$d bir pencere yöneticisine zaten sahip\n"
#: ../src/core/screen.c:1024
#: ../src/core/screen.c:1013
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "\"%2$s\" X oturumundaki ekran %1$d serberst bırakılamadı\"\n"
@ -325,7 +323,7 @@ msgid "Window manager error: "
msgstr "Pencere yöneticisi hatası: "
#. first time through
#: ../src/core/window.c:7145
#: ../src/core/window.c:7269
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@ -341,7 +339,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7808
#: ../src/core/window.c:7932
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
@ -404,14 +402,40 @@ msgid "Mutter"
msgstr "Mutter"
#: ../src/org.gnome.mutter.gschema.xml.in.h:1
msgid "Modifier to use for extended window management operations"
msgstr "Genişletilmiş pencere yönetimi işlemleri için kullanılacak değiştirici"
#: ../src/org.gnome.mutter.gschema.xml.in.h:2
msgid ""
"This key will initiate the \"overlay\", which is a combination window "
"overview and application launching system. The default is intended to be the "
"\"Windows key\" on PC hardware. It's expected that this binding either the "
"default or set to the empty string."
msgstr ""
"Bu anahtar, pencere genel görünümü ve uygulama başlatma sisteminin bir "
"birleşimi olan \"bindirme\" işlemini başlatır. Öntanımlı olarak PC "
"donanımındaki \"windows tuşu\" olması tasarlanmıştır. Bağlayıcı varsayılan "
"olarak veya boş dize olarak ayarlanması beklenir."
#: ../src/org.gnome.mutter.gschema.xml.in.h:3
msgid "Attach modal dialogs"
msgstr "Yardımcı diyalogları ekle"
#: ../src/org.gnome.mutter.gschema.xml.in.h:2
msgid "Cancel tab popup"
msgstr "Sekmeyi yeni pencerede açmayı iptal et"
#: ../src/org.gnome.mutter.gschema.xml.in.h:4
msgid ""
"When true, instead of having independent titlebars, modal dialogs appear "
"attached to the titlebar of the parent window and are moved together with "
"the parent window."
msgstr ""
"Eğer \"doğru\" ise, bağımsız başlık çubuklarına sahip olduğundan, yardım "
"diyalogları üst pencerenin başlık çubuğunda ekli gözükür ve üst pencere ile "
"birlikte hareket eder."
#: ../src/org.gnome.mutter.gschema.xml.in.h:3
#: ../src/org.gnome.mutter.gschema.xml.in.h:5
msgid "Live Hidden Windows"
msgstr "Çalışır Durumdaki Gizli Pencereler"
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
msgid ""
"Determines whether hidden windows (i.e., minimized windows and windows on "
"other workspaces than the current one) should be kept alive."
@ -419,27 +443,6 @@ msgstr ""
"Gizli pencerelerin (ö.r. küçültülmüş pencereler ve diğer çalışma alanındaki "
"pencereler) çalışır bırakılıp bırakılmayacağını belirler."
#: ../src/org.gnome.mutter.gschema.xml.in.h:4
msgid ""
"Determines whether the use of popup and highlight frame should be disabled "
"for window cycling."
msgstr ""
"Pencere geçişinde çerçeve vurgulanması ve açılır pencere kullanımının "
"kapatılıp "
"kapatılmayacağını belirler."
#: ../src/org.gnome.mutter.gschema.xml.in.h:5
msgid ""
"Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor."
msgstr ""
"Çalışma alanı değiştirilmesinin, tüm monitörlerdeki pencerelerde mi yoksa "
"sadece birincil monitördekilerde mi gerçekleşeceğini belirler."
#: ../src/org.gnome.mutter.gschema.xml.in.h:6
msgid "Draggable border width"
msgstr "Sürüklenebilir kenarlık genişliği"
#: ../src/org.gnome.mutter.gschema.xml.in.h:7
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
@ -452,30 +455,54 @@ msgid ""
"area. Dropping windows on the top screen edge maximizes them completely."
msgstr ""
"Eğer etkinleştirilirse, dikey ekran kenarlarına bırakılan pencereler dikey "
"olarak "
"ekranı kaplar ve yatayda kullanılabilir alanın yarısını kaplayacak şekilde "
"yeniden "
"boyutlandırılır. Ekranın tepedeki kenarına bırakılan pencereler ekranı "
"tamamen kaplar."
"olarak ekranı kaplar ve yatayda kullanılabilir alanın yarısını kaplayacak "
"şekilde yeniden boyutlandırılır. Ekranın tepedeki kenarına bırakılan "
"pencereler ekranı tamamen kaplar."
#: ../src/org.gnome.mutter.gschema.xml.in.h:9
msgid "Live Hidden Windows"
msgstr "Çalışır Durumdaki Gizli Pencereler"
msgid "Workspaces are managed dynamically"
msgstr "Çalışma alanları dinamik olarak yönetilir"
#: ../src/org.gnome.mutter.gschema.xml.in.h:10
msgid "Modifier to use for extended window management operations"
msgstr "Genişletilmiş pencere yönetimi işlemleri için kullanılacak değiştirici"
msgid ""
"Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)."
msgstr ""
"Çalışma alanlarının dinamik olarak mı yönetileceğini yoksa sabit sayıda "
"çalışma alanı mı olacağını "
"belirler (org.gnome.desktop.wm.preferences içindeki num-workspaces değişkeni "
"tarafından belirlenir)."
#: ../src/org.gnome.mutter.gschema.xml.in.h:11
msgid "Workspaces only on primary"
msgstr "Sadece birincil monitördeki çalışma alanları"
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
msgid ""
"Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor."
msgstr ""
"Çalışma alanı değiştirilmesinin, tüm monitörlerdeki pencerelerde mi yoksa "
"sadece birincil monitördekilerde mi gerçekleşeceğini belirler."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
msgid "No tab popup"
msgstr "Sekme açılır penceresi yok"
#: ../src/org.gnome.mutter.gschema.xml.in.h:12
#| msgid "Remove Window From Top"
msgid "Select window from tab popup"
msgstr "Pencereyi, sekme açılır penceresinden seç"
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"Determines whether the use of popup and highlight frame should be disabled "
"for window cycling."
msgstr ""
"Pencere geçişinde çerçeve vurgulanması ve açılır pencere kullanımının "
"kapatılıp kapatılmayacağını belirler."
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Sürüklenebilir kenarlık genişliği"
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@ -484,81 +511,19 @@ msgstr ""
"kenarlıkları yetersiz gelirse, bu değere ulaşmak için görünmez kenarlıklar "
"eklenir."
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"This key will initiate the \"overlay\", which is a combination window "
"overview and application launching system. The default is intended to be the "
"\"Windows key\" on PC hardware. It's expected that this binding either the "
"default or set to the empty string."
msgstr ""
"Bu anahtar, pencere genel görünümü ve uygulama başlatma sisteminin bir "
"birleşimi olan \"bindirme\" işlemini başlatır. Öntanımlı olarak PC "
"donanımındaki \"windows tuşu\" olması tasarlanmıştır. Bağlayıcı varsayılan "
"olarak veya boş dize olarak ayarlanması beklenir."
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Select window from tab popup"
msgstr "Pencereyi, sekme açılır penceresinden seç"
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid ""
"When true, instead of having independent titlebars, modal dialogs appear "
"attached to the titlebar of the parent window and are moved together with "
"the parent window."
msgstr ""
"Eğer \"doğru\" ise, bağımsız başlık çubuklarına sahip olduğundan, yardım "
"diyalogları üst pencerenin başlık çubuğunda ekli gözükür ve üst pencere ile "
"birlikte hareket eder."
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid "Workspaces only on primary"
msgstr "Sadece birincil monitördeki çalışma alanları"
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup"
msgstr "Sekmeyi yeni pencerede açmayı iptal et"
#: ../src/tools/mutter-message.c:123
#, c-format
msgid "Usage: %s\n"
msgstr "Kullanım: %s\n"
#: ../src/ui/frames.c:1157
msgid "Close Window"
msgstr "Pencereyi Kapat"
#: ../src/ui/frames.c:1160
msgid "Window Menu"
msgstr "Pencere Menüsü"
#: ../src/ui/frames.c:1163
msgid "Minimize Window"
msgstr "Pencereyi Küçült"
#: ../src/ui/frames.c:1166
msgid "Maximize Window"
msgstr "Pencereyi Büyült"
#: ../src/ui/frames.c:1169
msgid "Restore Window"
msgstr "Pencere Geri Getir"
#: ../src/ui/frames.c:1172
msgid "Roll Up Window"
msgstr "Pencereyi Yukarı Sar"
#: ../src/ui/frames.c:1175
msgid "Unroll Window"
msgstr "Pencereyi Geri Sar"
#: ../src/ui/frames.c:1178
msgid "Keep Window On Top"
msgstr "Pencereyi Üstte Tut"
#: ../src/ui/frames.c:1181
msgid "Remove Window From Top"
msgstr "Pencereyi Üstten Kaldır"
#: ../src/ui/frames.c:1184
msgid "Always On Visible Workspace"
msgstr "Her Zaman Görünen Çalışma Alanında"
#: ../src/ui/frames.c:1187
msgid "Put Window On Only One Workspace"
msgstr "Pencereyi Sadece Bir Çalışma Alanına Yerleştir"
#. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:69
msgid "Mi_nimize"
@ -1629,6 +1594,39 @@ msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr ""
"%d kordinat ifadesi %g saniye içinde ayrıştırıldı (%g saniye ortalama ile)\n"
#~ msgid "Close Window"
#~ msgstr "Pencereyi Kapat"
#~ msgid "Window Menu"
#~ msgstr "Pencere Menüsü"
#~ msgid "Minimize Window"
#~ msgstr "Pencereyi Küçült"
#~ msgid "Maximize Window"
#~ msgstr "Pencereyi Büyült"
#~ msgid "Restore Window"
#~ msgstr "Pencere Geri Getir"
#~ msgid "Roll Up Window"
#~ msgstr "Pencereyi Yukarı Sar"
#~ msgid "Unroll Window"
#~ msgstr "Pencereyi Geri Sar"
#~ msgid "Keep Window On Top"
#~ msgstr "Pencereyi Üstte Tut"
#~ msgid "Remove Window From Top"
#~ msgstr "Pencereyi Üstten Kaldır"
#~ msgid "Always On Visible Workspace"
#~ msgstr "Her Zaman Görünen Çalışma Alanında"
#~ msgid "Put Window On Only One Workspace"
#~ msgstr "Pencereyi Sadece Bir Çalışma Alanına Yerleştir"
#~ msgid "Switch to workspace 1"
#~ msgstr "Çalışma alanı 1'e geç"

1082
po/uk.po

File diff suppressed because it is too large Load Diff

1114
po/vi.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -52,7 +52,6 @@ libmutter_la_SOURCES = \
compositor/meta-shadow-factory.c \
compositor/meta-shadow-factory-private.h \
compositor/meta-shaped-texture.c \
compositor/meta-shaped-texture.h \
compositor/meta-texture-rectangle.c \
compositor/meta-texture-rectangle.h \
compositor/meta-texture-tower.c \
@ -131,8 +130,6 @@ libmutter_la_SOURCES = \
core/core.h \
ui/ui.h \
inlinepixbufs.h \
ui/fixedtip.c \
ui/fixedtip.h \
ui/frames.c \
ui/frames.h \
ui/menu.c \
@ -172,6 +169,7 @@ libmutterinclude_base_headers = \
meta/main.h \
meta/meta-background-actor.h \
meta/meta-plugin.h \
meta/meta-shaped-texture.h \
meta/meta-shadow-factory.h \
meta/meta-window-actor.h \
meta/prefs.h \
@ -224,7 +222,7 @@ INTROSPECTION_GIRS = Meta-$(api_version).gir
Meta-$(api_version).gir: libmutter.la
@META_GIR@_INCLUDES = GObject-2.0 GDesktopEnums-3.0 Gdk-3.0 Gtk-3.0 Clutter-1.0 xlib-2.0 xfixes-4.0
@META_GIR@_PACKAGES = clutter-1.0 gtk+-3.0
@META_GIR@_EXPORT_PACKAGES = libmutter
@META_GIR@_CFLAGS = $(INCLUDES)
@META_GIR@_LIBS = libmutter.la
@META_GIR@_FILES = \

View File

@ -55,9 +55,6 @@ struct _MetaCompScreen
};
void meta_switch_workspace_completed (MetaScreen *screen);
void meta_set_stage_input_region (MetaScreen *screen,
XserverRegion region);
void meta_empty_stage_input_region (MetaScreen *screen);
gboolean meta_begin_modal_for_plugin (MetaScreen *screen,
MetaPlugin *plugin,

View File

@ -557,9 +557,7 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
clutter_actor_hide (info->hidden_group);
info->plugin_mgr =
meta_plugin_manager_get (screen);
meta_plugin_manager_initialize (info->plugin_mgr);
info->plugin_mgr = meta_plugin_manager_new (screen);
/*
* Delay the creation of the overlay window as long as we can, to avoid
@ -871,29 +869,6 @@ meta_compositor_unmaximize_window (MetaCompositor *compositor,
meta_window_actor_unmaximize (window_actor, old_rect, new_rect);
}
void
meta_compositor_update_workspace_geometry (MetaCompositor *compositor,
MetaWorkspace *workspace)
{
#if 0
/* FIXME -- should do away with this function in favour of MetaWorkspace
* signal.
*/
MetaScreen *screen = meta_workspace_get_screen (workspace);
MetaCompScreen *info;
MetaPluginManager *mgr;
DEBUG_TRACE ("meta_compositor_update_workspace_geometry\n");
info = meta_screen_get_compositor_data (screen);
mgr = info->plugin_mgr;
if (!mgr || !workspace)
return;
meta_plugin_manager_update_workspace (mgr, workspace);
#endif
}
void
meta_compositor_switch_workspace (MetaCompositor *compositor,
MetaScreen *screen,

View File

@ -28,6 +28,9 @@
#define COGL_ENABLE_EXPERIMENTAL_API
#include <cogl/cogl-texture-pixmap-x11.h>
#define CLUTTER_ENABLE_EXPERIMENTAL_API
#include <clutter/clutter.h>
#include <X11/Xatom.h>
#include "cogl-utils.h"
@ -252,6 +255,8 @@ meta_background_actor_dispose (GObject *object)
cogl_handle_unref (priv->material);
priv->material = COGL_INVALID_HANDLE;
}
G_OBJECT_CLASS (meta_background_actor_parent_class)->dispose (object);
}
static void
@ -537,9 +542,11 @@ meta_background_actor_update (MetaScreen *screen)
if (root_pixmap_id != None)
{
CoglHandle texture;
CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
GError *error = NULL;
meta_error_trap_push (display);
texture = cogl_texture_pixmap_x11_new (root_pixmap_id, FALSE);
texture = cogl_texture_pixmap_x11_new (ctx, root_pixmap_id, FALSE, &error);
meta_error_trap_pop (display);
if (texture != COGL_INVALID_HANDLE)
@ -550,6 +557,12 @@ meta_background_actor_update (MetaScreen *screen)
background->have_pixmap = True;
return;
}
else
{
g_warning ("Failed to create background texture from pixmap: %s",
error->message);
g_error_free (error);
}
}
background->have_pixmap = False;

View File

@ -35,34 +35,32 @@
#include <clutter/x11/clutter-x11.h>
static GSList *plugin_types;
/*
* We have one "default plugin manager" that acts for the first screen,
* but also can be used before we open any screens, and additional
* plugin managers for each screen. (This is ugly. Probably we should
* have one plugin manager and only make the plugins per-screen.)
*/
static MetaPluginManager *default_plugin_manager;
static GType plugin_type = G_TYPE_NONE;
struct MetaPluginManager
{
MetaScreen *screen;
GList /* MetaPlugin */ *plugins; /* TODO -- maybe use hash table */
MetaScreen *screen;
MetaPlugin *plugin;
};
void
meta_plugin_manager_set_plugin_type (GType gtype)
{
if (plugin_type != G_TYPE_NONE)
meta_fatal ("Mutter plugin already set: %s", g_type_name (plugin_type));
plugin_type = gtype;
}
/*
* Loads the given plugin.
*/
void
meta_plugin_manager_load (MetaPluginManager *plugin_mgr,
const gchar *plugin_name)
meta_plugin_manager_load (const gchar *plugin_name)
{
const gchar *dpath = MUTTER_PLUGIN_DIR "/";
gchar *path;
MetaModule *module;
GType plugin_type;
if (g_path_is_absolute (plugin_name))
path = g_strdup (plugin_name);
@ -81,162 +79,57 @@ meta_plugin_manager_load (MetaPluginManager *plugin_mgr,
exit (1);
}
plugin_type = meta_module_get_plugin_type (module);
meta_plugin_manager_register (plugin_mgr, plugin_type);
meta_plugin_manager_set_plugin_type (meta_module_get_plugin_type (module));
g_type_module_unuse (G_TYPE_MODULE (module));
g_free (path);
}
/*
* Registers the given plugin type
*/
void
meta_plugin_manager_register (MetaPluginManager *plugin_mgr,
GType plugin_type)
{
MetaPlugin *plugin;
plugin_types = g_slist_prepend (plugin_types, GSIZE_TO_POINTER (plugin_type));
plugin = g_object_new (plugin_type, NULL);
plugin_mgr->plugins = g_list_prepend (plugin_mgr->plugins, plugin);
}
void
meta_plugin_manager_initialize (MetaPluginManager *plugin_mgr)
{
GList *iter;
if (!plugin_mgr->plugins)
{
/*
* If no plugins are specified, load the default plugin.
*/
meta_plugin_manager_load (plugin_mgr, "default");
}
for (iter = plugin_mgr->plugins; iter; iter = iter->next)
{
MetaPlugin *plugin = (MetaPlugin*) iter->data;
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
g_object_set (plugin,
"screen", plugin_mgr->screen,
NULL);
if (klass->start)
klass->start (plugin);
}
}
static MetaPluginManager *
MetaPluginManager *
meta_plugin_manager_new (MetaScreen *screen)
{
MetaPluginManager *plugin_mgr;
MetaPluginClass *klass;
MetaPlugin *plugin;
plugin_mgr = g_new0 (MetaPluginManager, 1);
plugin_mgr->screen = screen;
plugin_mgr->plugin = plugin = g_object_new (plugin_type, "screen", screen, NULL);
if (screen)
g_object_set_data (G_OBJECT (screen), "meta-plugin-manager", plugin_mgr);
klass = META_PLUGIN_GET_CLASS (plugin);
if (klass->start)
klass->start (plugin);
return plugin_mgr;
}
MetaPluginManager *
meta_plugin_manager_get_default (void)
{
if (!default_plugin_manager)
{
default_plugin_manager = meta_plugin_manager_new (NULL);
}
return default_plugin_manager;
}
MetaPluginManager *
meta_plugin_manager_get (MetaScreen *screen)
{
MetaPluginManager *plugin_mgr;
plugin_mgr = g_object_get_data (G_OBJECT (screen), "meta-plugin-manager");
if (plugin_mgr)
return plugin_mgr;
if (!default_plugin_manager)
meta_plugin_manager_get_default ();
if (!default_plugin_manager->screen)
{
/* The default plugin manager is so far unused, we can recycle it */
default_plugin_manager->screen = screen;
g_object_set_data (G_OBJECT (screen), "meta-plugin-manager", default_plugin_manager);
return default_plugin_manager;
}
else
{
GSList *iter;
GType plugin_type;
MetaPlugin *plugin;
plugin_mgr = meta_plugin_manager_new (screen);
for (iter = plugin_types; iter; iter = iter->next)
{
plugin_type = (GType)GPOINTER_TO_SIZE (iter->data);
plugin = g_object_new (plugin_type, "screen", screen, NULL);
plugin_mgr->plugins = g_list_prepend (plugin_mgr->plugins, plugin);
}
return plugin_mgr;
}
}
static void
meta_plugin_manager_kill_window_effects (MetaPluginManager *plugin_mgr,
MetaWindowActor *actor)
{
GList *l = plugin_mgr->plugins;
MetaPlugin *plugin = plugin_mgr->plugin;
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
while (l)
{
MetaPlugin *plugin = l->data;
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
if (!meta_plugin_disabled (plugin)
&& klass->kill_window_effects)
klass->kill_window_effects (plugin, actor);
l = l->next;
}
if (klass->kill_window_effects)
klass->kill_window_effects (plugin, actor);
}
static void
meta_plugin_manager_kill_switch_workspace (MetaPluginManager *plugin_mgr)
{
GList *l = plugin_mgr->plugins;
MetaPlugin *plugin = plugin_mgr->plugin;
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
while (l)
{
MetaPlugin *plugin = l->data;
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
if (!meta_plugin_disabled (plugin)
&& (meta_plugin_features (plugin) & META_PLUGIN_SWITCH_WORKSPACE)
&& klass->kill_switch_workspace)
klass->kill_switch_workspace (plugin);
l = l->next;
}
if (klass->kill_switch_workspace)
klass->kill_switch_workspace (plugin);
}
/*
* Public method that the compositor hooks into for events that require
* no additional parameters.
*
* Returns TRUE if at least one of the plugins handled the event type (i.e.,
* Returns TRUE if the plugin handled the event type (i.e.,
* if the return value is FALSE, there will be no subsequent call to the
* manager completed() callback, and the compositor must ensure that any
* appropriate post-effect cleanup is carried out.
@ -246,60 +139,48 @@ meta_plugin_manager_event_simple (MetaPluginManager *plugin_mgr,
MetaWindowActor *actor,
unsigned long event)
{
GList *l = plugin_mgr->plugins;
gboolean retval = FALSE;
MetaPlugin *plugin = plugin_mgr->plugin;
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen);
gboolean retval = FALSE;
if (display->display_opening)
return FALSE;
while (l)
switch (event)
{
MetaPlugin *plugin = l->data;
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
if (!meta_plugin_disabled (plugin) &&
(meta_plugin_features (plugin) & event))
case META_PLUGIN_MINIMIZE:
if (klass->minimize)
{
retval = TRUE;
meta_plugin_manager_kill_window_effects (plugin_mgr,
actor);
switch (event)
{
case META_PLUGIN_MINIMIZE:
if (klass->minimize)
{
meta_plugin_manager_kill_window_effects (
plugin_mgr,
actor);
_meta_plugin_effect_started (plugin);
klass->minimize (plugin, actor);
}
break;
case META_PLUGIN_MAP:
if (klass->map)
{
meta_plugin_manager_kill_window_effects (
plugin_mgr,
actor);
_meta_plugin_effect_started (plugin);
klass->map (plugin, actor);
}
break;
case META_PLUGIN_DESTROY:
if (klass->destroy)
{
_meta_plugin_effect_started (plugin);
klass->destroy (plugin, actor);
}
break;
default:
g_warning ("Incorrect handler called for event %lu", event);
}
_meta_plugin_effect_started (plugin);
klass->minimize (plugin, actor);
}
break;
case META_PLUGIN_MAP:
if (klass->map)
{
retval = TRUE;
meta_plugin_manager_kill_window_effects (plugin_mgr,
actor);
l = l->next;
_meta_plugin_effect_started (plugin);
klass->map (plugin, actor);
}
break;
case META_PLUGIN_DESTROY:
if (klass->destroy)
{
retval = TRUE;
_meta_plugin_effect_started (plugin);
klass->destroy (plugin, actor);
}
break;
default:
g_warning ("Incorrect handler called for event %lu", event);
}
return retval;
@ -309,7 +190,7 @@ meta_plugin_manager_event_simple (MetaPluginManager *plugin_mgr,
* The public method that the compositor hooks into for maximize and unmaximize
* events.
*
* Returns TRUE if at least one of the plugins handled the event type (i.e.,
* Returns TRUE if the plugin handled the event type (i.e.,
* if the return value is FALSE, there will be no subsequent call to the
* manager completed() callback, and the compositor must ensure that any
* appropriate post-effect cleanup is carried out.
@ -323,57 +204,44 @@ meta_plugin_manager_event_maximize (MetaPluginManager *plugin_mgr,
gint target_width,
gint target_height)
{
GList *l = plugin_mgr->plugins;
MetaPlugin *plugin = plugin_mgr->plugin;
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen);
gboolean retval = FALSE;
MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen);
if (display->display_opening)
return FALSE;
while (l)
switch (event)
{
MetaPlugin *plugin = l->data;
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
if (!meta_plugin_disabled (plugin) &&
(meta_plugin_features (plugin) & event))
case META_PLUGIN_MAXIMIZE:
if (klass->maximize)
{
retval = TRUE;
meta_plugin_manager_kill_window_effects (plugin_mgr,
actor);
switch (event)
{
case META_PLUGIN_MAXIMIZE:
if (klass->maximize)
{
meta_plugin_manager_kill_window_effects (
plugin_mgr,
actor);
_meta_plugin_effect_started (plugin);
klass->maximize (plugin, actor,
target_x, target_y,
target_width, target_height);
}
break;
case META_PLUGIN_UNMAXIMIZE:
if (klass->unmaximize)
{
meta_plugin_manager_kill_window_effects (
plugin_mgr,
actor);
_meta_plugin_effect_started (plugin);
klass->unmaximize (plugin, actor,
target_x, target_y,
target_width, target_height);
}
break;
default:
g_warning ("Incorrect handler called for event %lu", event);
}
_meta_plugin_effect_started (plugin);
klass->maximize (plugin, actor,
target_x, target_y,
target_width, target_height);
}
break;
case META_PLUGIN_UNMAXIMIZE:
if (klass->unmaximize)
{
retval = TRUE;
meta_plugin_manager_kill_window_effects (plugin_mgr,
actor);
l = l->next;
_meta_plugin_effect_started (plugin);
klass->unmaximize (plugin, actor,
target_x, target_y,
target_width, target_height);
}
break;
default:
g_warning ("Incorrect handler called for event %lu", event);
}
return retval;
@ -382,7 +250,7 @@ meta_plugin_manager_event_maximize (MetaPluginManager *plugin_mgr,
/*
* The public method that the compositor hooks into for desktop switching.
*
* Returns TRUE if at least one of the plugins handled the event type (i.e.,
* Returns TRUE if the plugin handled the event type (i.e.,
* if the return value is FALSE, there will be no subsequent call to the
* manager completed() callback, and the compositor must ensure that any
* appropriate post-effect cleanup is carried out.
@ -393,32 +261,21 @@ meta_plugin_manager_switch_workspace (MetaPluginManager *plugin_mgr,
gint to,
MetaMotionDirection direction)
{
GList *l = plugin_mgr->plugins;
MetaPlugin *plugin = plugin_mgr->plugin;
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen);
gboolean retval = FALSE;
MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen);
if (display->display_opening)
return FALSE;
while (l)
if (klass->switch_workspace)
{
MetaPlugin *plugin = l->data;
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
retval = TRUE;
meta_plugin_manager_kill_switch_workspace (plugin_mgr);
if (!meta_plugin_disabled (plugin) &&
(meta_plugin_features (plugin) & META_PLUGIN_SWITCH_WORKSPACE))
{
if (klass->switch_workspace)
{
retval = TRUE;
meta_plugin_manager_kill_switch_workspace (plugin_mgr);
_meta_plugin_effect_started (plugin);
klass->switch_workspace (plugin, from, to, direction);
}
}
l = l->next;
_meta_plugin_effect_started (plugin);
klass->switch_workspace (plugin, from, to, direction);
}
return retval;
@ -427,7 +284,7 @@ meta_plugin_manager_switch_workspace (MetaPluginManager *plugin_mgr,
/*
* The public method that the compositor hooks into for desktop switching.
*
* Returns TRUE if at least one of the plugins handled the event type (i.e.,
* Returns TRUE if the plugin handled the event type (i.e.,
* if the return value is FALSE, there will be no subsequent call to the
* manager completed() callback, and the compositor must ensure that any
* appropriate post-effect cleanup is carried out.
@ -436,49 +293,20 @@ gboolean
meta_plugin_manager_xevent_filter (MetaPluginManager *plugin_mgr,
XEvent *xev)
{
GList *l;
gboolean have_plugin_xevent_func;
MetaPlugin *plugin = plugin_mgr->plugin;
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
if (!plugin_mgr)
return FALSE;
l = plugin_mgr->plugins;
/* We need to make sure that clutter gets certain events, like
* ConfigureNotify on the stage window. If there is a plugin that
* provides an xevent_filter function, then it's the responsibility
* of that plugin to pass events to Clutter. Otherwise, we send the
* event directly to Clutter ourselves.
*
* What happens if there are two plugins with xevent_filter functions
* is undefined; in general, multiple competing plugins are something
* we don't support well or care much about.
*
* FIXME: Really, we should just always handle sending the event to
* clutter if a plugin doesn't report the event as handled by
* returning TRUE, but it doesn't seem worth breaking compatibility
* of the plugin interface right now to achieve this; the way it is
* now works fine in practice.
*/
have_plugin_xevent_func = FALSE;
while (l)
{
MetaPlugin *plugin = l->data;
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
if (klass->xevent_filter)
{
have_plugin_xevent_func = TRUE;
if (klass->xevent_filter (plugin, xev) == TRUE)
return TRUE;
}
l = l->next;
}
if (!have_plugin_xevent_func)
if (klass->xevent_filter && klass->xevent_filter (plugin, xev))
return TRUE;
else
return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE;
return FALSE;
}

View File

@ -46,14 +46,9 @@
*/
typedef struct MetaPluginManager MetaPluginManager;
MetaPluginManager * meta_plugin_manager_get (MetaScreen *screen);
MetaPluginManager * meta_plugin_manager_get_default (void);
MetaPluginManager * meta_plugin_manager_new (MetaScreen *screen);
void meta_plugin_manager_load (MetaPluginManager *mgr,
const gchar *plugin_name);
void meta_plugin_manager_register (MetaPluginManager *mgr,
GType plugin_type);
void meta_plugin_manager_initialize (MetaPluginManager *mgr);
void meta_plugin_manager_load (const gchar *plugin_name);
gboolean meta_plugin_manager_event_simple (MetaPluginManager *mgr,
MetaWindowActor *actor,
@ -66,10 +61,6 @@ gboolean meta_plugin_manager_event_maximize (MetaPluginManager *mgr,
gint target_y,
gint target_width,
gint target_height);
void meta_plugin_manager_update_workspaces (MetaPluginManager *mgr);
void meta_plugin_manager_update_workspace (MetaPluginManager *mgr,
MetaWorkspace *w);
gboolean meta_plugin_manager_switch_workspace (MetaPluginManager *mgr,
gint from,

View File

@ -44,74 +44,17 @@ enum
{
PROP_0,
PROP_SCREEN,
PROP_FEATURES,
PROP_DISABLED,
PROP_DEBUG_MODE,
};
struct _MetaPluginPrivate
{
MetaScreen *screen;
gulong features;
gint running;
gboolean disabled : 1;
gboolean debug : 1;
};
static void
meta_plugin_set_features (MetaPlugin *plugin)
{
MetaPluginPrivate *priv = plugin->priv;
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
priv->features = 0;
/*
* Feature flags: identify events that the plugin can handle; a plugin can
* handle one or more events.
*/
if (klass->minimize)
priv->features |= META_PLUGIN_MINIMIZE;
if (klass->maximize)
priv->features |= META_PLUGIN_MAXIMIZE;
if (klass->unmaximize)
priv->features |= META_PLUGIN_UNMAXIMIZE;
if (klass->map)
priv->features |= META_PLUGIN_MAP;
if (klass->destroy)
priv->features |= META_PLUGIN_DESTROY;
if (klass->switch_workspace)
priv->features |= META_PLUGIN_SWITCH_WORKSPACE;
}
static void
meta_plugin_constructed (GObject *object)
{
meta_plugin_set_features (META_PLUGIN (object));
if (G_OBJECT_CLASS (meta_plugin_parent_class)->constructed)
G_OBJECT_CLASS (meta_plugin_parent_class)->constructed (object);
}
static void
meta_plugin_dispose (GObject *object)
{
G_OBJECT_CLASS (meta_plugin_parent_class)->dispose (object);
}
static void
meta_plugin_finalize (GObject *object)
{
G_OBJECT_CLASS (meta_plugin_parent_class)->finalize (object);
}
static void
meta_plugin_set_property (GObject *object,
guint prop_id,
@ -125,9 +68,6 @@ meta_plugin_set_property (GObject *object,
case PROP_SCREEN:
priv->screen = g_value_get_object (value);
break;
case PROP_DISABLED:
priv->disabled = g_value_get_boolean (value);
break;
case PROP_DEBUG_MODE:
priv->debug = g_value_get_boolean (value);
break;
@ -150,15 +90,9 @@ meta_plugin_get_property (GObject *object,
case PROP_SCREEN:
g_value_set_object (value, priv->screen);
break;
case PROP_DISABLED:
g_value_set_boolean (value, priv->disabled);
break;
case PROP_DEBUG_MODE:
g_value_set_boolean (value, priv->debug);
break;
case PROP_FEATURES:
g_value_set_ulong (value, priv->features);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@ -171,9 +105,6 @@ meta_plugin_class_init (MetaPluginClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
gobject_class->constructed = meta_plugin_constructed;
gobject_class->finalize = meta_plugin_finalize;
gobject_class->dispose = meta_plugin_dispose;
gobject_class->set_property = meta_plugin_set_property;
gobject_class->get_property = meta_plugin_get_property;
@ -185,22 +116,6 @@ meta_plugin_class_init (MetaPluginClass *klass)
META_TYPE_SCREEN,
G_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_FEATURES,
g_param_spec_ulong ("features",
"Features",
"Plugin Features",
0 , G_MAXULONG, 0,
G_PARAM_READABLE));
g_object_class_install_property (gobject_class,
PROP_DISABLED,
g_param_spec_boolean ("disabled",
"Plugin disabled",
"Plugin disabled",
FALSE,
G_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_DEBUG_MODE,
g_param_spec_boolean ("debug-mode",
@ -220,22 +135,6 @@ meta_plugin_init (MetaPlugin *self)
self->priv = priv = META_PLUGIN_GET_PRIVATE (self);
}
gulong
meta_plugin_features (MetaPlugin *plugin)
{
MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv;
return priv->features;
}
gboolean
meta_plugin_disabled (MetaPlugin *plugin)
{
MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv;
return priv->disabled;
}
gboolean
meta_plugin_running (MetaPlugin *plugin)
{
@ -263,38 +162,6 @@ meta_plugin_get_info (MetaPlugin *plugin)
return NULL;
}
ClutterActor *
meta_plugin_get_overlay_group (MetaPlugin *plugin)
{
MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv;
return meta_get_overlay_group_for_screen (priv->screen);
}
ClutterActor *
meta_plugin_get_stage (MetaPlugin *plugin)
{
MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv;
return meta_get_stage_for_screen (priv->screen);
}
ClutterActor *
meta_plugin_get_window_group (MetaPlugin *plugin)
{
MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv;
return meta_get_window_group_for_screen (priv->screen);
}
ClutterActor *
meta_plugin_get_background_actor (MetaPlugin *plugin)
{
MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv;
return meta_get_background_actor_for_screen (priv->screen);
}
/**
* _meta_plugin_effect_started:
* @plugin: the plugin
@ -315,7 +182,7 @@ meta_plugin_switch_workspace_completed (MetaPlugin *plugin)
{
MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv;
MetaScreen *screen = meta_plugin_get_screen (plugin);
MetaScreen *screen = priv->screen;
if (priv->running-- < 0)
{
@ -389,80 +256,6 @@ meta_plugin_destroy_completed (MetaPlugin *plugin,
meta_plugin_window_effect_completed (plugin, actor, META_PLUGIN_DESTROY);
}
void
meta_plugin_query_screen_size (MetaPlugin *plugin,
int *width,
int *height)
{
MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv;
meta_screen_get_size (priv->screen, width, height);
}
void
meta_plugin_set_stage_reactive (MetaPlugin *plugin,
gboolean reactive)
{
MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv;
MetaScreen *screen = priv->screen;
if (reactive)
meta_set_stage_input_region (screen, None);
else
meta_empty_stage_input_region (screen);
}
void
meta_plugin_set_stage_input_area (MetaPlugin *plugin,
gint x, gint y, gint width, gint height)
{
MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv;
MetaScreen *screen = priv->screen;
MetaDisplay *display = meta_screen_get_display (screen);
Display *xdpy = meta_display_get_xdisplay (display);
XRectangle rect;
XserverRegion region;
rect.x = x;
rect.y = y;
rect.width = width;
rect.height = height;
region = XFixesCreateRegion (xdpy, &rect, 1);
meta_set_stage_input_region (screen, region);
XFixesDestroyRegion (xdpy, region);
}
void
meta_plugin_set_stage_input_region (MetaPlugin *plugin,
XserverRegion region)
{
MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv;
MetaScreen *screen = priv->screen;
meta_set_stage_input_region (screen, region);
}
/**
* meta_plugin_get_window_actors:
* @plugin: A #MetaPlugin
*
* This function returns all of the #MetaWindowActor objects referenced by Mutter, including
* override-redirect windows. The returned list is a snapshot of Mutter's current
* stacking order, with the topmost window last.
*
* The 'restacked' signal of #MetaScreen signals when this value has changed.
*
* Returns: (transfer none) (element-type MetaWindowActor): Windows in stacking order, topmost last
*/
GList *
meta_plugin_get_window_actors (MetaPlugin *plugin)
{
MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv;
return meta_get_window_actors (priv->screen);
}
/**
* meta_plugin_begin_modal:
* @plugin: a #MetaPlugin
@ -502,7 +295,7 @@ meta_plugin_begin_modal (MetaPlugin *plugin,
}
/**
* meta_plugin_end_modal
* meta_plugin_end_modal:
* @plugin: a #MetaPlugin
* @timestamp: the time used for releasing grabs
*
@ -521,16 +314,6 @@ meta_plugin_end_modal (MetaPlugin *plugin,
meta_end_modal_for_plugin (priv->screen, plugin, timestamp);
}
Display *
meta_plugin_get_xdisplay (MetaPlugin *plugin)
{
MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv;
MetaDisplay *display = meta_screen_get_display (priv->screen);
Display *xdpy = meta_display_get_xdisplay (display);
return xdpy;
}
/**
* meta_plugin_get_screen:
* @plugin: a #MetaPlugin
@ -548,19 +331,3 @@ meta_plugin_get_screen (MetaPlugin *plugin)
return priv->screen;
}
/**
* meta_plugin_type_register:
* @plugin_type: a #MetaPlugin type
*
* Register @plugin_type as a compositor plugin type to be used.
* You must call this before calling meta_init().
*/
void
meta_plugin_type_register (GType plugin_type)
{
MetaPluginManager *plugin_manager;
plugin_manager = meta_plugin_manager_get_default ();
meta_plugin_manager_register (plugin_manager, plugin_type);
}

View File

@ -130,7 +130,7 @@ MetaShadowClassInfo default_shadow_classes[] = {
{ "popup-menu", { 1, -1, 0, 1, 128 }, { 1, -1, 0, 1, 128 } },
{ "dropdown-menu", { 1, 10, 0, 1, 128 }, { 1, 10, 0, 1, 128 } },
{ "attached", { 2, 50, 0, 1, 255 }, { 1, 50, 0, 1, 128 } }
{ "attached", { 2, -1, 0, 1, 255 }, { 1, -1, 0, 1, 128 } }
};
G_DEFINE_TYPE (MetaShadowFactory, meta_shadow_factory, G_TYPE_OBJECT);

View File

@ -1,11 +1,13 @@
/*
* shaped texture
*
* An actor to draw a texture clipped to a list of rectangles
* An actor to draw a masked texture.
*
* Authored By Neil Roberts <neil@linux.intel.com>
* and Jasper St. Pierre <jstpierre@mecheye.net>
*
* Copyright (C) 2008 Intel Corporation
* Copyright (C) 2012 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
@ -25,32 +27,37 @@
#include <config.h>
#include "meta-shaped-texture.h"
#define CLUTTER_ENABLE_EXPERIMENTAL_API
#define COGL_ENABLE_EXPERIMENTAL_API
#include <meta/meta-shaped-texture.h>
#include "meta-texture-tower.h"
#include "meta-texture-rectangle.h"
#include <clutter/clutter.h>
#include <cogl/cogl.h>
#include <string.h>
#include <cogl/cogl-texture-pixmap-x11.h>
#include <gdk/gdk.h> /* for gdk_rectangle_intersect() */
static void meta_shaped_texture_dispose (GObject *object);
static void meta_shaped_texture_notify (GObject *object,
GParamSpec *pspec);
static void meta_shaped_texture_paint (ClutterActor *actor);
static void meta_shaped_texture_pick (ClutterActor *actor,
const ClutterColor *color);
static void meta_shaped_texture_update_area (ClutterX11TexturePixmap *texture,
int x,
int y,
int width,
int height);
static void meta_shaped_texture_get_preferred_width (ClutterActor *self,
gfloat for_height,
gfloat *min_width_p,
gfloat *natural_width_p);
static void meta_shaped_texture_dirty_mask (MetaShapedTexture *stex);
static void meta_shaped_texture_get_preferred_height (ClutterActor *self,
gfloat for_width,
gfloat *min_height_p,
gfloat *natural_height_p);
static gboolean meta_shaped_texture_get_paint_volume (ClutterActor *self, ClutterPaintVolume *volume);
G_DEFINE_TYPE (MetaShapedTexture, meta_shaped_texture,
CLUTTER_X11_TYPE_TEXTURE_PIXMAP);
CLUTTER_TYPE_ACTOR);
#define META_SHAPED_TEXTURE_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), META_TYPE_SHAPED_TEXTURE, \
@ -59,19 +66,15 @@ G_DEFINE_TYPE (MetaShapedTexture, meta_shaped_texture,
struct _MetaShapedTexturePrivate
{
MetaTextureTower *paint_tower;
Pixmap pixmap;
CoglHandle texture;
CoglHandle mask_texture;
CoglHandle material;
CoglHandle material_unshaped;
cairo_region_t *clip_region;
cairo_region_t *shape_region;
cairo_region_t *overlay_region;
cairo_path_t *overlay_path;
cairo_region_t *visible_pixels_region;
guint mask_width, mask_height;
guint tex_width, tex_height;
guint create_mipmaps : 1;
};
@ -81,15 +84,14 @@ meta_shaped_texture_class_init (MetaShapedTextureClass *klass)
{
GObjectClass *gobject_class = (GObjectClass *) klass;
ClutterActorClass *actor_class = (ClutterActorClass *) klass;
ClutterX11TexturePixmapClass *x11_texture_class = (ClutterX11TexturePixmapClass *) klass;
gobject_class->dispose = meta_shaped_texture_dispose;
gobject_class->notify = meta_shaped_texture_notify;
actor_class->get_preferred_width = meta_shaped_texture_get_preferred_width;
actor_class->get_preferred_height = meta_shaped_texture_get_preferred_height;
actor_class->paint = meta_shaped_texture_paint;
actor_class->pick = meta_shaped_texture_pick;
x11_texture_class->update_area = meta_shaped_texture_update_area;
actor_class->get_paint_volume = meta_shaped_texture_get_paint_volume;
g_type_class_add_private (klass, sizeof (MetaShapedTexturePrivate));
}
@ -101,11 +103,8 @@ meta_shaped_texture_init (MetaShapedTexture *self)
priv = self->priv = META_SHAPED_TEXTURE_GET_PRIVATE (self);
priv->shape_region = NULL;
priv->overlay_path = NULL;
priv->overlay_region = NULL;
priv->visible_pixels_region = NULL;
priv->paint_tower = meta_texture_tower_new ();
priv->texture = COGL_INVALID_HANDLE;
priv->mask_texture = COGL_INVALID_HANDLE;
priv->create_mipmaps = TRUE;
}
@ -120,8 +119,6 @@ meta_shaped_texture_dispose (GObject *object)
meta_texture_tower_free (priv->paint_tower);
priv->paint_tower = NULL;
meta_shaped_texture_dirty_mask (self);
if (priv->material != COGL_INVALID_HANDLE)
{
cogl_handle_unref (priv->material);
@ -132,287 +129,18 @@ meta_shaped_texture_dispose (GObject *object)
cogl_handle_unref (priv->material_unshaped);
priv->material_unshaped = COGL_INVALID_HANDLE;
}
if (priv->texture != COGL_INVALID_HANDLE)
{
cogl_handle_unref (priv->texture);
priv->texture = COGL_INVALID_HANDLE;
}
meta_shaped_texture_set_shape_region (self, NULL);
meta_shaped_texture_set_mask_texture (self, COGL_INVALID_HANDLE);
meta_shaped_texture_set_clip_region (self, NULL);
meta_shaped_texture_set_overlay_path (self, NULL, NULL);
G_OBJECT_CLASS (meta_shaped_texture_parent_class)->dispose (object);
}
static void
meta_shaped_texture_notify (GObject *object,
GParamSpec *pspec)
{
if (G_OBJECT_CLASS (meta_shaped_texture_parent_class)->notify)
G_OBJECT_CLASS (meta_shaped_texture_parent_class)->notify (object, pspec);
/* It seems like we could just do this out of update_area(), but unfortunately,
* clutter_glx_texture_pixmap() doesn't call through the vtable on the
* initial update_area, so we need to look for changes to the texture
* explicitly.
*/
if (strcmp (pspec->name, "cogl-texture") == 0)
{
MetaShapedTexture *stex = (MetaShapedTexture *) object;
MetaShapedTexturePrivate *priv = stex->priv;
meta_shaped_texture_clear (stex);
if (priv->create_mipmaps)
meta_texture_tower_set_base_texture (priv->paint_tower,
clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex)));
}
}
static void
meta_shaped_texture_dirty_mask (MetaShapedTexture *stex)
{
MetaShapedTexturePrivate *priv = stex->priv;
if (priv->visible_pixels_region != NULL)
{
cairo_region_destroy (priv->visible_pixels_region);
priv->visible_pixels_region = NULL;
if (priv->mask_texture != COGL_INVALID_HANDLE)
{
cogl_handle_unref (priv->mask_texture);
priv->mask_texture = COGL_INVALID_HANDLE;
}
if (priv->material != COGL_INVALID_HANDLE)
cogl_material_set_layer (priv->material, 1, COGL_INVALID_HANDLE);
}
}
static void
scan_visible_region (MetaShapedTexture *stex,
guchar *mask_data,
int stride)
{
MetaShapedTexturePrivate *priv = stex->priv;
cairo_region_t *visible_pixels_region;
cairo_region_t *overlay_region;
int i, n_rects;
/* The visible pixels region contains all pixel values above 0.
* This is somewhat complicated when there's an overlay: we
* need to scan all regions potentially modified by it.
*/
if (priv->visible_pixels_region)
cairo_region_destroy (priv->visible_pixels_region);
priv->visible_pixels_region = cairo_region_copy (priv->shape_region);
visible_pixels_region = priv->visible_pixels_region;
overlay_region = priv->overlay_region;
/* With no overlay region, the visible region is defined
* by the mask region, so we don't need to scan anything. */
if (overlay_region == NULL)
return;
/* Subtract all the rectangles in the overlay region so that we can
* scan all the pixels potentially added by the overlay path. */
cairo_region_subtract (visible_pixels_region, overlay_region);
n_rects = cairo_region_num_rectangles (overlay_region);
for (i = 0; i < n_rects; i++)
{
int x, y;
cairo_rectangle_int_t rect;
cairo_region_get_rectangle (overlay_region, i, &rect);
for (y = rect.y; y < (rect.y + rect.height); y++)
{
for (x = rect.x; x < (rect.x + rect.width); x++)
{
int w = x;
while (mask_data[y * stride + w] > 0 && w < (rect.x + rect.width))
w++;
if (w > 0)
{
cairo_rectangle_int_t tmp;
tmp.x = x;
tmp.y = y;
tmp.width = w - x;
tmp.height = 1;
cairo_region_union_rectangle (visible_pixels_region, &tmp);
x = w;
}
}
}
}
}
static void
install_overlay_path (MetaShapedTexture *stex,
guchar *mask_data,
int tex_width,
int tex_height,
int stride)
{
MetaShapedTexturePrivate *priv = stex->priv;
int i, n_rects;
cairo_t *cr;
cairo_rectangle_int_t rect;
cairo_surface_t *surface;
if (priv->overlay_region == NULL)
return;
surface = cairo_image_surface_create_for_data (mask_data,
CAIRO_FORMAT_A8,
tex_width,
tex_height,
stride);
cr = cairo_create (surface);
cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
n_rects = cairo_region_num_rectangles (priv->overlay_region);
for (i = 0; i < n_rects; i++)
{
cairo_region_get_rectangle (priv->overlay_region, i, &rect);
cairo_rectangle (cr, rect.x, rect.y, rect.width, rect.height);
}
cairo_fill_preserve (cr);
if (priv->overlay_path == NULL)
{
/* If we have an overlay region but not an overlay path, then we
* just need to clear the rectangles in the overlay region. */
goto out;
}
cairo_clip (cr);
cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
cairo_set_source_rgba (cr, 1, 1, 1, 1);
cairo_append_path (cr, priv->overlay_path);
cairo_fill (cr);
out:
cairo_destroy (cr);
cairo_surface_destroy (surface);
}
static void
meta_shaped_texture_ensure_mask (MetaShapedTexture *stex)
{
MetaShapedTexturePrivate *priv = stex->priv;
CoglHandle paint_tex;
guint tex_width, tex_height;
paint_tex = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex));
if (paint_tex == COGL_INVALID_HANDLE)
return;
tex_width = cogl_texture_get_width (paint_tex);
tex_height = cogl_texture_get_height (paint_tex);
/* If the mask texture we have was created for a different size then
recreate it */
if (priv->mask_texture != COGL_INVALID_HANDLE
&& (priv->mask_width != tex_width || priv->mask_height != tex_height))
meta_shaped_texture_dirty_mask (stex);
/* If we don't have a mask texture yet then create one */
if (priv->visible_pixels_region == NULL)
{
guchar *mask_data;
int i;
int n_rects;
int stride;
GLenum paint_gl_target;
/* If we have no shape region and no (or an empty) overlay region, we
* don't need to create a full mask texture, so quit early. */
if (priv->shape_region == NULL &&
(priv->overlay_region == NULL ||
cairo_region_num_rectangles (priv->overlay_region) == 0))
{
/* With no mask, the visible region is just
* {0, 0, tex_width, tex_height}. */
cairo_rectangle_int_t rect = { 0, 0, tex_width, tex_height };
priv->visible_pixels_region = cairo_region_create_rectangle (&rect);
return;
}
stride = cairo_format_stride_for_width (CAIRO_FORMAT_A8, tex_width);
/* Create data for an empty image */
mask_data = g_malloc0 (stride * tex_height);
n_rects = cairo_region_num_rectangles (priv->shape_region);
/* Fill in each rectangle. */
for (i = 0; i < n_rects; i ++)
{
cairo_rectangle_int_t rect;
cairo_region_get_rectangle (priv->shape_region, i, &rect);
gint x1 = rect.x, x2 = x1 + rect.width;
gint y1 = rect.y, y2 = y1 + rect.height;
guchar *p;
/* Clip the rectangle to the size of the texture */
x1 = CLAMP (x1, 0, (gint) tex_width - 1);
x2 = CLAMP (x2, x1, (gint) tex_width);
y1 = CLAMP (y1, 0, (gint) tex_height - 1);
y2 = CLAMP (y2, y1, (gint) tex_height);
/* Fill the rectangle */
for (p = mask_data + y1 * stride + x1;
y1 < y2;
y1++, p += stride)
memset (p, 255, x2 - x1);
}
install_overlay_path (stex, mask_data, tex_width, tex_height, stride);
scan_visible_region (stex, mask_data, stride);
cogl_texture_get_gl_texture (paint_tex, NULL, &paint_gl_target);
#ifdef GL_TEXTURE_RECTANGLE_ARB
if (paint_gl_target == GL_TEXTURE_RECTANGLE_ARB)
{
priv->mask_texture
= meta_texture_rectangle_new (tex_width, tex_height,
0, /* flags */
/* data format */
COGL_PIXEL_FORMAT_A_8,
/* internal GL format */
GL_ALPHA,
/* internal cogl format */
COGL_PIXEL_FORMAT_A_8,
/* rowstride */
stride,
mask_data);
}
else
#endif /* GL_TEXTURE_RECTANGLE_ARB */
priv->mask_texture = cogl_texture_new_from_data (tex_width, tex_height,
COGL_TEXTURE_NONE,
COGL_PIXEL_FORMAT_A_8,
COGL_PIXEL_FORMAT_ANY,
stride,
mask_data);
g_free (mask_data);
priv->mask_width = tex_width;
priv->mask_height = tex_height;
}
}
static void
meta_shaped_texture_paint (ClutterActor *actor)
{
@ -451,20 +179,20 @@ meta_shaped_texture_paint (ClutterActor *actor)
if (priv->create_mipmaps)
paint_tex = meta_texture_tower_get_paint_texture (priv->paint_tower);
else
paint_tex = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex));
paint_tex = priv->texture;
if (paint_tex == COGL_INVALID_HANDLE)
return;
tex_width = cogl_texture_get_width (paint_tex);
tex_height = cogl_texture_get_height (paint_tex);
tex_width = priv->tex_width;
tex_height = priv->tex_height;
if (tex_width == 0 || tex_height == 0) /* no contents yet */
return;
if (priv->shape_region == NULL)
if (priv->mask_texture == COGL_INVALID_HANDLE)
{
/* No region means an unclipped shape. Use a single-layer texture. */
/* Use a single-layer texture if we don't have a mask. */
if (priv->material_unshaped == COGL_INVALID_HANDLE)
{
@ -477,8 +205,6 @@ meta_shaped_texture_paint (ClutterActor *actor)
}
else
{
meta_shaped_texture_ensure_mask (stex);
if (priv->material == COGL_INVALID_HANDLE)
{
if (G_UNLIKELY (material_template == COGL_INVALID_HANDLE))
@ -512,6 +238,7 @@ meta_shaped_texture_paint (ClutterActor *actor)
{
int n_rects;
int i;
cairo_rectangle_int_t tex_rect = { 0, 0, tex_width, tex_height };
/* Limit to how many separate rectangles we'll draw; beyond this just
* fall back and draw the whole thing */
@ -529,6 +256,9 @@ meta_shaped_texture_paint (ClutterActor *actor)
cairo_region_get_rectangle (priv->clip_region, i, &rect);
if (!gdk_rectangle_intersect (&tex_rect, &rect, &rect))
continue;
x1 = rect.x;
y1 = rect.y;
x2 = rect.x + rect.width;
@ -565,7 +295,7 @@ meta_shaped_texture_pick (ClutterActor *actor,
MetaShapedTexturePrivate *priv = stex->priv;
/* If there is no region then use the regular pick */
if (priv->shape_region == NULL)
if (priv->mask_texture == COGL_INVALID_HANDLE)
CLUTTER_ACTOR_CLASS (meta_shaped_texture_parent_class)
->pick (actor, color);
else if (clutter_actor_should_pick_paint (actor))
@ -574,7 +304,7 @@ meta_shaped_texture_pick (ClutterActor *actor,
ClutterActorBox alloc;
guint tex_width, tex_height;
paint_tex = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex));
paint_tex = priv->texture;
if (paint_tex == COGL_INVALID_HANDLE)
return;
@ -585,8 +315,6 @@ meta_shaped_texture_pick (ClutterActor *actor,
if (tex_width == 0 || tex_height == 0) /* no contents yet */
return;
meta_shaped_texture_ensure_mask (stex);
cogl_set_source_color4ub (color->red, color->green, color->blue,
color->alpha);
@ -602,19 +330,48 @@ meta_shaped_texture_pick (ClutterActor *actor,
}
static void
meta_shaped_texture_update_area (ClutterX11TexturePixmap *texture,
int x,
int y,
int width,
int height)
meta_shaped_texture_get_preferred_width (ClutterActor *self,
gfloat for_height,
gfloat *min_width_p,
gfloat *natural_width_p)
{
MetaShapedTexture *stex = (MetaShapedTexture *) texture;
MetaShapedTexturePrivate *priv = stex->priv;
MetaShapedTexturePrivate *priv;
CLUTTER_X11_TEXTURE_PIXMAP_CLASS (meta_shaped_texture_parent_class)->update_area (texture,
x, y, width, height);
g_return_if_fail (META_IS_SHAPED_TEXTURE (self));
meta_texture_tower_update_area (priv->paint_tower, x, y, width, height);
priv = META_SHAPED_TEXTURE (self)->priv;
if (min_width_p)
*min_width_p = 0;
if (natural_width_p)
*natural_width_p = priv->tex_width;
}
static void
meta_shaped_texture_get_preferred_height (ClutterActor *self,
gfloat for_width,
gfloat *min_height_p,
gfloat *natural_height_p)
{
MetaShapedTexturePrivate *priv;
g_return_if_fail (META_IS_SHAPED_TEXTURE (self));
priv = META_SHAPED_TEXTURE (self)->priv;
if (min_height_p)
*min_height_p = 0;
if (natural_height_p)
*natural_height_p = priv->tex_height;
}
static gboolean
meta_shaped_texture_get_paint_volume (ClutterActor *self,
ClutterPaintVolume *volume)
{
return clutter_paint_volume_set_from_allocation (volume, self);
}
ClutterActor *
@ -640,34 +397,16 @@ meta_shaped_texture_set_create_mipmaps (MetaShapedTexture *stex,
if (create_mipmaps != priv->create_mipmaps)
{
CoglHandle base_texture;
priv->create_mipmaps = create_mipmaps;
base_texture = create_mipmaps ?
clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex)) : COGL_INVALID_HANDLE;
priv->texture : COGL_INVALID_HANDLE;
meta_texture_tower_set_base_texture (priv->paint_tower, base_texture);
}
}
/* This is a workaround for deficiencies in the hack tower:
*
* When we call clutter_x11_texture_pixmap_set_pixmap(tp, None),
* ClutterX11TexturePixmap knows that it has to get rid of the old texture, but
* clutter_texture_set_cogl_texture(texture, COGL_INVALID_HANDLE) isn't allowed, so
* it grabs the material for the texture and manually sets the texture in it. This means
* that the "cogl-texture" property isn't notified, so we don't find out about it.
*
* And if we keep the CoglX11TexturePixmap around after the X pixmap is freed, then
* we'll trigger X errors when we actually try to free it.
*
* The only correct thing to do here is to change our code to derive
* from ClutterActor and get rid of the inheritance hack tower. Once
* we want to depend on Clutter-1.4 (which has CoglTexturePixmapX11),
* that will be very easy to do.
*/
void
meta_shaped_texture_clear (MetaShapedTexture *stex)
meta_shaped_texture_set_mask_texture (MetaShapedTexture *stex,
CoglHandle mask_texture)
{
MetaShapedTexturePrivate *priv;
@ -675,73 +414,98 @@ meta_shaped_texture_clear (MetaShapedTexture *stex)
priv = stex->priv;
meta_texture_tower_set_base_texture (priv->paint_tower, COGL_INVALID_HANDLE);
if (priv->mask_texture != COGL_INVALID_HANDLE)
{
cogl_handle_unref (priv->mask_texture);
priv->mask_texture = COGL_INVALID_HANDLE;
}
if (priv->material != COGL_INVALID_HANDLE)
cogl_material_set_layer (priv->material, 0, COGL_INVALID_HANDLE);
if (mask_texture != COGL_INVALID_HANDLE)
{
priv->mask_texture = mask_texture;
cogl_handle_ref (priv->mask_texture);
}
if (priv->material_unshaped != COGL_INVALID_HANDLE)
cogl_material_set_layer (priv->material_unshaped, 0, COGL_INVALID_HANDLE);
clutter_actor_queue_redraw (CLUTTER_ACTOR (stex));
}
void
meta_shaped_texture_set_shape_region (MetaShapedTexture *stex,
cairo_region_t *region)
meta_shaped_texture_update_area (MetaShapedTexture *stex,
int x,
int y,
int width,
int height)
{
MetaShapedTexturePrivate *priv;
const cairo_rectangle_int_t clip = { x, y, width, height };
priv = stex->priv;
if (priv->texture == COGL_INVALID_HANDLE)
return;
cogl_texture_pixmap_x11_update_area (priv->texture, x, y, width, height);
meta_texture_tower_update_area (priv->paint_tower, x, y, width, height);
clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (stex), &clip);
}
static void
set_cogl_texture (MetaShapedTexture *stex,
CoglHandle cogl_tex)
{
MetaShapedTexturePrivate *priv;
guint width, height;
g_return_if_fail (META_IS_SHAPED_TEXTURE (stex));
priv = stex->priv;
if (priv->shape_region != NULL)
if (priv->texture != COGL_INVALID_HANDLE)
cogl_handle_unref (priv->texture);
priv->texture = cogl_tex;
if (priv->material != COGL_INVALID_HANDLE)
cogl_material_set_layer (priv->material, 0, cogl_tex);
if (priv->material_unshaped != COGL_INVALID_HANDLE)
cogl_material_set_layer (priv->material_unshaped, 0, cogl_tex);
if (cogl_tex != COGL_INVALID_HANDLE)
{
cairo_region_destroy (priv->shape_region);
priv->shape_region = NULL;
width = cogl_texture_get_width (cogl_tex);
height = cogl_texture_get_height (cogl_tex);
if (width != priv->tex_width ||
height != priv->tex_height)
{
priv->tex_width = width;
priv->tex_height = height;
clutter_actor_queue_relayout (CLUTTER_ACTOR (stex));
}
}
else
{
/* size changed to 0 going to an invalid handle */
priv->tex_width = 0;
priv->tex_height = 0;
clutter_actor_queue_relayout (CLUTTER_ACTOR (stex));
}
if (region != NULL)
{
cairo_region_reference (region);
priv->shape_region = region;
}
meta_shaped_texture_dirty_mask (stex);
clutter_actor_queue_redraw (CLUTTER_ACTOR (stex));
}
/**
* meta_shaped_texture_get_visible_pixels_region:
* @stex: a #MetaShapedTexture
*
* Return a region enclosing only visible pixels: those with
* alpha values above 0.
*
* Returns: a #cairo_region_t
*/
cairo_region_t *
meta_shaped_texture_get_visible_pixels_region (MetaShapedTexture *stex)
{
g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex), NULL);
meta_shaped_texture_ensure_mask (stex);
return stex->priv->visible_pixels_region;
}
/**
* meta_shaped_texture_set_overlay_path:
* @stex: a #MetaShapedTexture
* @overlay_region: A region containing the parts of the mask to overlay.
* All rectangles in this region are wiped clear to full transparency,
* and the overlay path is clipped to this region.
* @overlay_path (transfer full): This path will be painted onto the mask
* texture with a fully opaque source. Due to the lack of refcounting
* in #cairo_path_t, ownership of the path is assumed.
* meta_shaped_texture_set_pixmap:
* @stex: The #MetaShapedTexture
* @pixmap: The pixmap you want the stex to assume
*/
void
meta_shaped_texture_set_overlay_path (MetaShapedTexture *stex,
cairo_region_t *overlay_region,
cairo_path_t *overlay_path)
meta_shaped_texture_set_pixmap (MetaShapedTexture *stex,
Pixmap pixmap)
{
MetaShapedTexturePrivate *priv;
@ -749,33 +513,42 @@ meta_shaped_texture_set_overlay_path (MetaShapedTexture *stex,
priv = stex->priv;
if (priv->overlay_region != NULL)
if (priv->pixmap == pixmap)
return;
priv->pixmap = pixmap;
if (pixmap != None)
{
cairo_region_destroy (priv->overlay_region);
priv->overlay_region = NULL;
CoglContext *ctx =
clutter_backend_get_cogl_context (clutter_get_default_backend ());
set_cogl_texture (stex, cogl_texture_pixmap_x11_new (ctx, pixmap, FALSE, NULL));
}
else
set_cogl_texture (stex, COGL_INVALID_HANDLE);
if (priv->overlay_path != NULL)
{
cairo_path_destroy (priv->overlay_path);
priv->overlay_path = NULL;
}
if (priv->create_mipmaps)
meta_texture_tower_set_base_texture (priv->paint_tower, priv->texture);
}
cairo_region_reference (overlay_region);
priv->overlay_region = overlay_region;
/* cairo_path_t does not have refcounting. */
priv->overlay_path = overlay_path;
meta_shaped_texture_dirty_mask (stex);
/**
* meta_shaped_texture_get_texture:
* @stex: The #MetaShapedTexture
*
* Returns: (transfer none): the unshaped texture
*/
CoglHandle
meta_shaped_texture_get_texture (MetaShapedTexture *stex)
{
g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex), COGL_INVALID_HANDLE);
return stex->priv->texture;
}
/**
* meta_shaped_texture_set_clip_region:
* @frame: a #MetaShapedTexture
* @stex: a #MetaShapedTexture
* @clip_region: (transfer full): the region of the texture that
* is visible and should be painted. OWNERSHIP IS ASSUMED BY
* THE FUNCTION (for efficiency to avoid a copy.)
* is visible and should be painted.
*
* Provides a hint to the texture about what areas of the texture
* are not completely obscured and thus need to be painted. This
@ -801,5 +574,106 @@ meta_shaped_texture_set_clip_region (MetaShapedTexture *stex,
priv->clip_region = NULL;
}
priv->clip_region = clip_region;
if (clip_region)
priv->clip_region = cairo_region_copy (clip_region);
else
priv->clip_region = NULL;
}
/**
* meta_shaped_texture_get_image:
* @stex: A #MetaShapedTexture
* @clip: A clipping rectangle, to help prevent extra processing.
* In the case that the clipping rectangle is partially or fully
* outside the bounds of the texture, the rectangle will be clipped.
*
* Flattens the two layers of the shaped texture into one ARGB32
* image by alpha blending the two images, and returns the flattened
* image.
*
* Returns: (transfer full): a new cairo surface to be freed with
* cairo_surface_destroy().
*/
cairo_surface_t *
meta_shaped_texture_get_image (MetaShapedTexture *stex,
cairo_rectangle_int_t *clip)
{
CoglHandle texture, mask_texture;
cairo_rectangle_int_t texture_rect = { 0, 0, 0, 0 };
cairo_surface_t *surface;
g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex), NULL);
texture = stex->priv->texture;
if (texture == NULL)
return NULL;
texture_rect.width = cogl_texture_get_width (texture);
texture_rect.height = cogl_texture_get_height (texture);
if (clip != NULL)
{
/* GdkRectangle is just a typedef of cairo_rectangle_int_t,
* so we can use the gdk_rectangle_* APIs on these. */
if (!gdk_rectangle_intersect (&texture_rect, clip, clip))
return NULL;
}
if (clip != NULL)
texture = cogl_texture_new_from_sub_texture (texture,
clip->x,
clip->y,
clip->width,
clip->height);
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
cogl_texture_get_width (texture),
cogl_texture_get_height (texture));
cogl_texture_get_data (texture, CLUTTER_CAIRO_FORMAT_ARGB32,
cairo_image_surface_get_stride (surface),
cairo_image_surface_get_data (surface));
cairo_surface_mark_dirty (surface);
if (clip != NULL)
cogl_object_unref (texture);
mask_texture = stex->priv->mask_texture;
if (mask_texture != COGL_INVALID_HANDLE)
{
cairo_t *cr;
cairo_surface_t *mask_surface;
if (clip != NULL)
mask_texture = cogl_texture_new_from_sub_texture (mask_texture,
clip->x,
clip->y,
clip->width,
clip->height);
mask_surface = cairo_image_surface_create (CAIRO_FORMAT_A8,
cogl_texture_get_width (mask_texture),
cogl_texture_get_height (mask_texture));
cogl_texture_get_data (mask_texture, COGL_PIXEL_FORMAT_A_8,
cairo_image_surface_get_stride (mask_surface),
cairo_image_surface_get_data (mask_surface));
cairo_surface_mark_dirty (mask_surface);
cr = cairo_create (surface);
cairo_set_source_surface (cr, mask_surface, 0, 0);
cairo_set_operator (cr, CAIRO_OPERATOR_DEST_IN);
cairo_paint (cr);
cairo_destroy (cr);
cairo_surface_destroy (mask_surface);
if (clip != NULL)
cogl_object_unref (mask_texture);
}
return surface;
}

View File

@ -5,7 +5,7 @@
*
* Authored By Neil Roberts <neil@linux.intel.com>
*
* Copyright (C) 2011 Intel Corporation
* Copyright (C) 2011, 2012 Intel Corporation
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@ -25,94 +25,77 @@
#include <config.h>
#define CLUTTER_ENABLE_EXPERIMENTAL_API
#define COGL_ENABLE_EXPERIMENTAL_API
#include <clutter/clutter.h>
#include "meta-texture-rectangle.h"
#ifdef GL_TEXTURE_RECTANGLE_ARB
static void (* pf_glGetIntegerv) (GLenum pname, GLint *params);
static void (* pf_glTexImage2D) (GLenum target, GLint level,
GLint internalFormat,
GLsizei width, GLsizei height,
GLint border, GLenum format, GLenum type,
const GLvoid *pixels);
static void (* pf_glGenTextures) (GLsizei n, GLuint *textures);
static void (* pf_glDeleteTextures) (GLsizei n, const GLuint *texture);
static void (* pf_glBindTexture) (GLenum target, GLuint texture);
static void
rectangle_texture_destroy_cb (void *user_data)
{
GLuint tex = GPOINTER_TO_UINT (user_data);
pf_glDeleteTextures (1, &tex);
}
#endif /* GL_TEXTURE_RECTANGLE_ARB */
CoglHandle
CoglTexture *
meta_texture_rectangle_new (unsigned int width,
unsigned int height,
CoglTextureFlags flags,
CoglPixelFormat format,
GLenum internal_gl_format,
GLenum internal_format,
CoglPixelFormat internal_format,
unsigned int rowstride,
const guint8 *data)
const guint8 *data,
GError **error)
{
CoglHandle cogl_tex = COGL_INVALID_HANDLE;
ClutterBackend *backend =
clutter_get_default_backend ();
CoglContext *context =
clutter_backend_get_cogl_context (backend);
CoglTextureRectangle *tex_rect;
#ifdef GL_TEXTURE_RECTANGLE_ARB
tex_rect = cogl_texture_rectangle_new_with_size (context,
width, height,
internal_format,
error);
if (tex_rect == NULL)
return NULL;
static CoglUserDataKey user_data_key;
GLint old_binding;
GLuint tex;
if (pf_glGenTextures == NULL)
{
pf_glGetIntegerv = (void *) cogl_get_proc_address ("glGetIntegerv");
pf_glTexImage2D = (void *) cogl_get_proc_address ("glTexImage2D");
pf_glGenTextures = (void *) cogl_get_proc_address ("glGenTextures");
pf_glDeleteTextures = (void *) cogl_get_proc_address ("glDeleteTextures");
pf_glBindTexture = (void *) cogl_get_proc_address ("glBindTexture");
}
pf_glGenTextures (1, &tex);
pf_glGetIntegerv (GL_TEXTURE_BINDING_RECTANGLE_ARB, &old_binding);
pf_glBindTexture (GL_TEXTURE_RECTANGLE_ARB, tex);
pf_glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0,
internal_gl_format, width, height,
0, internal_gl_format,
GL_UNSIGNED_BYTE, NULL);
pf_glBindTexture (GL_TEXTURE_RECTANGLE_ARB, old_binding);
cogl_tex = cogl_texture_new_from_foreign (tex,
GL_TEXTURE_RECTANGLE_ARB,
width, height,
0, 0, /* no waste */
internal_format);
/* Cogl won't destroy the GL texture when a foreign texture is used
so we need to destroy it manually. We can set a destroy
notification callback to do this transparently */
cogl_object_set_user_data (cogl_tex,
&user_data_key,
GUINT_TO_POINTER (tex),
rectangle_texture_destroy_cb);
/* Use cogl_texture_set_region instead of uploading the data
directly with GL calls so that we can let Cogl deal with setting
the pixel store parameters and handling format conversion */
if (data)
cogl_texture_set_region (cogl_tex,
0, 0, /* src x/y */
0, 0, /* dst x/y */
width, height, /* dst width/height */
width, height, /* src width/height */
cogl_texture_set_region (COGL_TEXTURE (tex_rect),
0, 0, /* src_x/y */
0, 0, /* dst_x/y */
width, height, /* dst_width/height */
width, height, /* width/height */
format,
rowstride,
data);
#endif /* GL_TEXTURE_RECTANGLE_ARB */
return cogl_tex;
return COGL_TEXTURE (tex_rect);
}
static void
texture_rectangle_check_cb (CoglTexture *sub_texture,
const float *sub_texture_coords,
const float *meta_coords,
void *user_data)
{
gboolean *result = user_data;
if (cogl_is_texture_rectangle (sub_texture))
*result = TRUE;
}
/* Determines if the given texture is using a rectangle texture as its
* primitive texture type. Eventually this function could be replaced
* with cogl_texture_get_type if Cogl makes that public.
*
* http://git.gnome.org/browse/cogl/commit/?h=8012eee31
*/
gboolean
meta_texture_rectangle_check (CoglTexture *texture)
{
gboolean result = FALSE;
cogl_meta_texture_foreach_in_region (COGL_META_TEXTURE (texture),
0.0f, 0.0f, /* tx_1 / ty_1 */
1.0f, 1.0f, /* tx_2 / ty_2 */
COGL_PIPELINE_WRAP_MODE_REPEAT,
COGL_PIPELINE_WRAP_MODE_REPEAT,
texture_rectangle_check_cb,
&result);
return result;
}

View File

@ -30,15 +30,17 @@
G_BEGIN_DECLS
CoglHandle
CoglTexture *
meta_texture_rectangle_new (unsigned int width,
unsigned int height,
CoglTextureFlags flags,
CoglPixelFormat format,
GLenum internal_gl_format,
GLenum internal_format,
CoglPixelFormat internal_format,
unsigned int rowstride,
const guint8 *data);
const guint8 *data,
GError **error);
gboolean
meta_texture_rectangle_check (CoglTexture *texture);
G_END_DECLS

View File

@ -98,18 +98,6 @@ meta_texture_tower_free (MetaTextureTower *tower)
g_slice_free (MetaTextureTower, tower);
}
#ifdef GL_TEXTURE_RECTANGLE_ARB
static gboolean
texture_is_rectangle (CoglHandle texture)
{
GLuint gl_tex;
GLenum gl_target;
cogl_texture_get_gl_texture (texture, &gl_tex, &gl_target);
return gl_target == GL_TEXTURE_RECTANGLE_ARB;
}
#endif /* GL_TEXTURE_RECTANGLE_ARB */
/**
* meta_texture_tower_set_base_texture:
* @tower: a #MetaTextureTower
@ -354,13 +342,11 @@ get_paint_level (int width, int height)
return (int)(0.5 + lambda);
}
#ifdef GL_TEXTURE_RECTANGLE_ARB
static gboolean
is_power_of_two (int x)
{
return (x & (x - 1)) == 0;
}
#endif /* GL_TEXTURE_RECTANGLE_ARB */
static void
texture_tower_create_texture (MetaTextureTower *tower,
@ -368,25 +354,23 @@ texture_tower_create_texture (MetaTextureTower *tower,
int width,
int height)
{
#ifdef GL_TEXTURE_RECTANGLE_ARB
if ((!is_power_of_two (width) || !is_power_of_two (height)) &&
texture_is_rectangle (tower->textures[level - 1]))
meta_texture_rectangle_check (tower->textures[level - 1]))
{
tower->textures[level] =
meta_texture_rectangle_new (width, height,
0, /* flags */
/* data format */
TEXTURE_FORMAT,
/* internal GL format */
GL_RGBA,
/* internal cogl format */
TEXTURE_FORMAT,
/* rowstride */
width * 4,
/* data */
NULL,
/* error */
NULL);
}
else
#endif /* GL_TEXTURE_RECTANGLE_ARB */
{
tower->textures[level] = cogl_texture_new_with_size (width, height,
COGL_TEXTURE_NO_AUTO_MIPMAP,
@ -562,7 +546,7 @@ texture_tower_revalidate_client (MetaTextureTower *tower,
4 * dest_width,
dest_data);
if (dest_height < source_texture_height)
if (dest_texture_height < source_texture_height)
{
g_free (source_tmp1);
g_free (source_tmp2);

View File

@ -13,17 +13,20 @@
#define COGL_ENABLE_EXPERIMENTAL_API
#include <cogl/cogl-texture-pixmap-x11.h>
#include <gdk/gdk.h> /* for gdk_rectangle_union() */
#include <string.h>
#include <meta/display.h>
#include <meta/errors.h>
#include "frame.h"
#include <meta/window.h>
#include <meta/meta-shaped-texture.h>
#include "xprops.h"
#include "compositor-private.h"
#include "meta-shadow-factory-private.h"
#include "meta-shaped-texture.h"
#include "meta-window-actor-private.h"
#include "meta-texture-rectangle.h"
#include "region-utils.h"
enum {
POSITION_CHANGED,
@ -123,15 +126,10 @@ enum
PROP_META_WINDOW = 1,
PROP_META_SCREEN,
PROP_X_WINDOW,
PROP_X_WINDOW_ATTRIBUTES,
PROP_NO_SHADOW,
PROP_SHADOW_CLASS
};
#define DEFAULT_SHADOW_RADIUS 12
#define DEFAULT_SHADOW_X_OFFSET 0
#define DEFAULT_SHADOW_Y_OFFSET 8
static void meta_window_actor_dispose (GObject *object);
static void meta_window_actor_finalize (GObject *object);
static void meta_window_actor_constructed (GObject *object);
@ -739,74 +737,52 @@ meta_window_actor_has_shadow (MetaWindowActor *self)
meta_window_is_fullscreen (priv->window))
return FALSE;
/*
* If we have two snap-tiled windows, we don't want the shadow to obstruct
* the other window.
*/
if (meta_window_get_tile_match (priv->window))
return FALSE;
/*
* Always put a shadow around windows with a frame - This should override
* the restriction about not putting a shadow around ARGB windows.
*/
if (priv->window)
{
if (meta_window_get_frame (priv->window))
{
meta_verbose ("Window 0x%x has shadow because it has a frame\n",
(guint)priv->xwindow);
return TRUE;
}
}
if (meta_window_get_frame (priv->window))
return TRUE;
/*
* Do not add shadows to ARGB windows; eventually we should generate a
* shadow from the input shape for such windows.
*/
if (priv->argb32 || priv->opacity != 0xff)
{
meta_verbose ("Window 0x%x has no shadow as it is ARGB\n",
(guint)priv->xwindow);
return FALSE;
}
return FALSE;
/*
* Add shadows to override redirect windows (e.g., Gtk menus).
*/
if (priv->window->override_redirect)
{
meta_verbose ("Window 0x%x has shadow because it is override redirect.\n",
(guint)priv->xwindow);
return TRUE;
}
return TRUE;
/*
* Don't put shadow around DND icon windows
*/
if (window_type == META_WINDOW_DND ||
window_type == META_WINDOW_DESKTOP)
{
meta_verbose ("Window 0x%x has no shadow as it is DND or Desktop\n",
(guint)priv->xwindow);
return FALSE;
}
return FALSE;
if (window_type == META_WINDOW_MENU
#if 0
|| window_type == META_WINDOW_DROPDOWN_MENU
#endif
)
{
meta_verbose ("Window 0x%x has shadow as it is a menu\n",
(guint)priv->xwindow);
return TRUE;
}
return TRUE;
#if 0
if (window_type == META_WINDOW_TOOLTIP)
{
meta_verbose ("Window 0x%x has shadow as it is a tooltip\n",
(guint)priv->xwindow);
return TRUE;
}
return TRUE;
#endif
meta_verbose ("Window 0x%x has no shadow as it fell through\n",
(guint)priv->xwindow);
return FALSE;
}
@ -944,26 +920,20 @@ static void
meta_window_actor_damage_all (MetaWindowActor *self)
{
MetaWindowActorPrivate *priv = self->priv;
ClutterX11TexturePixmap *texture_x11 = CLUTTER_X11_TEXTURE_PIXMAP (priv->actor);
guint pixmap_width = 0;
guint pixmap_height = 0;
CoglHandle texture;
if (!priv->needs_damage_all)
return;
g_object_get (texture_x11,
"pixmap-width", &pixmap_width,
"pixmap-height", &pixmap_height,
NULL);
texture = meta_shaped_texture_get_texture (META_SHAPED_TEXTURE (priv->actor));
if (!priv->mapped || priv->needs_pixmap)
return;
clutter_x11_texture_pixmap_update_area (texture_x11,
0,
0,
pixmap_width,
pixmap_height);
meta_shaped_texture_update_area (META_SHAPED_TEXTURE (priv->actor),
0, 0,
cogl_texture_get_width (texture),
cogl_texture_get_height (texture));
priv->needs_damage_all = FALSE;
}
@ -1202,9 +1172,8 @@ meta_window_actor_detach (MetaWindowActor *self)
* you are supposed to be able to free a GLXPixmap after freeing the underlying
* pixmap, but it certainly doesn't work with current DRI/Mesa
*/
clutter_x11_texture_pixmap_set_pixmap (CLUTTER_X11_TEXTURE_PIXMAP (priv->actor),
None);
meta_shaped_texture_clear (META_SHAPED_TEXTURE (priv->actor));
meta_shaped_texture_set_pixmap (META_SHAPED_TEXTURE (priv->actor),
None);
cogl_flush();
XFreePixmap (xdisplay, priv->back_pixmap);
@ -1219,31 +1188,36 @@ meta_window_actor_should_unredirect (MetaWindowActor *self)
MetaWindow *metaWindow = meta_window_actor_get_meta_window (self);
MetaScreen *screen = meta_window_get_screen (metaWindow);
MetaWindowActorPrivate *priv = self->priv;
int screen_width, screen_height;
MetaRectangle window_rect, monitor_rect;
int num_monitors = meta_screen_get_n_monitors (screen);
int i;
if (meta_window_is_override_redirect (metaWindow) && priv->opacity == 0xff && !priv->argb32)
if (!meta_window_is_override_redirect (metaWindow))
return FALSE;
if (priv->opacity != 0xff)
return FALSE;
if (priv->argb32)
return FALSE;
if (metaWindow->has_shape)
return FALSE;
meta_screen_get_size (screen, &screen_width, &screen_height);
meta_window_get_outer_rect (metaWindow, &window_rect);
if (window_rect.x == 0 && window_rect.y == 0 &&
window_rect.width == screen_width && window_rect.height == screen_height)
return TRUE;
for (i = 0; i < num_monitors; i++)
{
int screen_width, screen_height;
MetaRectangle window_rect;
meta_screen_get_size (screen, &screen_width, &screen_height);
meta_window_get_outer_rect (metaWindow, &window_rect);
if (window_rect.x == 0 && window_rect.y == 0 &&
window_rect.width == screen_width && window_rect.height == screen_height)
return TRUE;
else
{
int num_monitors = meta_screen_get_n_monitors (screen);
int i;
MetaRectangle monitor_rect;
for (i = 0; i < num_monitors; i++)
{
meta_screen_get_monitor_geometry (screen , i, &monitor_rect);
if (monitor_rect.x == window_rect.x && monitor_rect.y == window_rect.y &&
monitor_rect.width == window_rect.width && monitor_rect.height == window_rect.height)
return TRUE;
}
}
meta_screen_get_monitor_geometry (screen , i, &monitor_rect);
if (monitor_rect.x == window_rect.x && monitor_rect.y == window_rect.y &&
monitor_rect.width == window_rect.width && monitor_rect.height == window_rect.height)
return TRUE;
}
return FALSE;
@ -1616,24 +1590,16 @@ meta_window_actor_update_bounding_region_and_borders (MetaWindowActor *self,
int height)
{
MetaWindowActorPrivate *priv = self->priv;
MetaFrame *frame;
MetaFrameBorders borders;
cairo_rectangle_int_t bounding_rectangle;
bounding_rectangle.x = 0;
bounding_rectangle.y = 0;
meta_frame_calc_borders (priv->window->frame, &borders);
frame = priv->window->frame;
if (frame != NULL)
{
meta_frame_calc_borders (frame, &borders);
bounding_rectangle.x = borders.invisible.left;
bounding_rectangle.y = borders.invisible.top;
bounding_rectangle.x = borders.invisible.left;
bounding_rectangle.y = borders.invisible.top;
width -= borders.invisible.left + borders.invisible.right;
height -= borders.invisible.top + borders.invisible.bottom;
}
width -= borders.invisible.left + borders.invisible.right;
height -= borders.invisible.top + borders.invisible.bottom;
bounding_rectangle.width = width;
bounding_rectangle.height = height;
@ -1723,7 +1689,7 @@ meta_window_actor_get_obscured_region (MetaWindowActor *self)
#if 0
/* Print out a region; useful for debugging */
static void
dump_region (cairo_region_t *region)
print_region (cairo_region_t *region)
{
int n_rects;
int i;
@ -1741,6 +1707,26 @@ dump_region (cairo_region_t *region)
}
#endif
#if 0
/* Dump a region to a PNG file; useful for debugging */
static void
see_region (cairo_region_t *region,
int width,
int height,
char *filename)
{
cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_A8, width, height);
cairo_t *cr = cairo_create (surface);
gdk_cairo_region (cr, region);
cairo_fill (cr);
cairo_surface_write_to_png (surface, filename);
cairo_destroy (cr);
cairo_surface_destroy (surface);
}
#endif
/**
* meta_window_actor_set_visible_region:
* @self: a #MetaWindowActor
@ -1756,22 +1742,9 @@ meta_window_actor_set_visible_region (MetaWindowActor *self,
cairo_region_t *visible_region)
{
MetaWindowActorPrivate *priv = self->priv;
cairo_region_t *texture_clip_region = NULL;
/* Get the area of the window texture that would be drawn if
* we weren't obscured at all
*/
texture_clip_region = meta_shaped_texture_get_visible_pixels_region (META_SHAPED_TEXTURE (priv->actor));
texture_clip_region = cairo_region_copy (texture_clip_region);
/* Then intersect that with the visible region to get the region
* that we actually need to redraw.
*/
cairo_region_intersect (texture_clip_region, visible_region);
/* Assumes ownership */
meta_shaped_texture_set_clip_region (META_SHAPED_TEXTURE (priv->actor),
texture_clip_region);
visible_region);
}
/**
@ -1823,19 +1796,6 @@ meta_window_actor_reset_visible_regions (MetaWindowActor *self)
meta_window_actor_clear_shadow_clip (self);
}
static gboolean
texture_pixmap_using_extension (ClutterX11TexturePixmap *texture)
{
ClutterTexture *self = CLUTTER_TEXTURE (texture);
CoglHandle handle;
handle = clutter_texture_get_cogl_texture (self);
return handle != NULL &&
cogl_is_texture_pixmap_x11 (handle) &&
cogl_texture_pixmap_x11_is_using_tfp_extension (handle);
}
static void
check_needs_pixmap (MetaWindowActor *self)
{
@ -1869,7 +1829,7 @@ check_needs_pixmap (MetaWindowActor *self)
if (priv->back_pixmap == None)
{
gint pxm_width, pxm_height;
CoglHandle texture;
meta_error_trap_push (display);
@ -1898,23 +1858,22 @@ check_needs_pixmap (MetaWindowActor *self)
meta_shaped_texture_set_create_mipmaps (META_SHAPED_TEXTURE (priv->actor),
FALSE);
clutter_x11_texture_pixmap_set_pixmap
(CLUTTER_X11_TEXTURE_PIXMAP (priv->actor),
priv->back_pixmap);
meta_shaped_texture_set_pixmap (META_SHAPED_TEXTURE (priv->actor),
priv->back_pixmap);
texture = meta_shaped_texture_get_texture (META_SHAPED_TEXTURE (priv->actor));
/*
* This only works *after* actually setting the pixmap, so we have to
* do it here.
* See: http://bugzilla.clutter-project.org/show_bug.cgi?id=2236
*/
if (G_UNLIKELY (!texture_pixmap_using_extension (CLUTTER_X11_TEXTURE_PIXMAP (priv->actor))))
if (G_UNLIKELY (!cogl_texture_pixmap_x11_is_using_tfp_extension (texture)))
g_warning ("NOTE: Not using GLX TFP!\n");
g_object_get (priv->actor,
"pixmap-width", &pxm_width,
"pixmap-height", &pxm_height,
NULL);
meta_window_actor_update_bounding_region_and_borders (self, pxm_width, pxm_height);
meta_window_actor_update_bounding_region_and_borders (self,
cogl_texture_get_width (texture),
cogl_texture_get_height (texture));
}
priv->needs_pixmap = FALSE;
@ -2007,7 +1966,6 @@ meta_window_actor_process_damage (MetaWindowActor *self,
XDamageNotifyEvent *event)
{
MetaWindowActorPrivate *priv = self->priv;
ClutterX11TexturePixmap *texture_x11 = CLUTTER_X11_TEXTURE_PIXMAP (priv->actor);
priv->received_damage = TRUE;
@ -2038,11 +1996,11 @@ meta_window_actor_process_damage (MetaWindowActor *self,
if (!priv->mapped || priv->needs_pixmap)
return;
clutter_x11_texture_pixmap_update_area (texture_x11,
event->area.x,
event->area.y,
event->area.width,
event->area.height);
meta_shaped_texture_update_area (META_SHAPED_TEXTURE (priv->actor),
event->area.x,
event->area.y,
event->area.width,
event->area.height);
}
void
@ -2059,121 +2017,196 @@ meta_window_actor_sync_visibility (MetaWindowActor *self)
}
}
static inline void
set_integral_bounding_rect (cairo_rectangle_int_t *rect,
double x, double y,
double width, double height)
{
rect->x = floor(x);
rect->y = floor(y);
rect->width = ceil(x + width) - rect->x;
rect->height = ceil(y + height) - rect->y;
}
#define TAU (2*M_PI)
static void
update_corners (MetaWindowActor *self,
MetaFrameBorders *borders)
install_corners (MetaWindow *window,
MetaFrameBorders *borders,
cairo_t *cr)
{
MetaWindowActorPrivate *priv = self->priv;
MetaRectangle outer;
cairo_rectangle_int_t corner_rects[4];
cairo_region_t *corner_region;
cairo_path_t *corner_path;
float top_left, top_right, bottom_left, bottom_right;
float x, y;
int x, y;
MetaRectangle outer;
/* need these to build a path */
cairo_t *cr;
cairo_surface_t *surface;
if (!priv->window->frame)
{
meta_shaped_texture_set_overlay_path (META_SHAPED_TEXTURE (priv->actor),
NULL, NULL);
return;
}
meta_window_get_outer_rect (priv->window, &outer);
meta_frame_get_corner_radiuses (priv->window->frame,
meta_frame_get_corner_radiuses (window->frame,
&top_left,
&top_right,
&bottom_left,
&bottom_right);
/* Unfortunately, cairo does not allow us to create a context
* without a surface. Create a 0x0 image surface to "paint to"
* so we can get the path. */
surface = cairo_image_surface_create (CAIRO_FORMAT_A8,
0, 0);
cr = cairo_create (surface);
meta_window_get_outer_rect (window, &outer);
/* top left */
x = borders->invisible.left;
y = borders->invisible.top;
set_integral_bounding_rect (&corner_rects[0],
x, y, top_left, top_left);
cairo_arc (cr,
x + top_left,
y + top_left,
top_left,
0, M_PI*2);
2 * TAU / 4,
3 * TAU / 4);
/* top right */
x = borders->invisible.left + outer.width - top_right;
y = borders->invisible.top;
set_integral_bounding_rect (&corner_rects[1],
x, y, top_right, top_right);
cairo_arc (cr,
x,
y + top_right,
top_right,
0, M_PI*2);
3 * TAU / 4,
4 * TAU / 4);
/* bottom right */
x = borders->invisible.left + outer.width - bottom_right;
y = borders->invisible.top + outer.height - bottom_right;
set_integral_bounding_rect (&corner_rects[2],
x, y, bottom_right, bottom_right);
cairo_arc (cr,
x,
y,
bottom_right,
0, M_PI*2);
0 * TAU / 4,
1 * TAU / 4);
/* bottom left */
x = borders->invisible.left;
y = borders->invisible.top + outer.height - bottom_left;
set_integral_bounding_rect (&corner_rects[3],
x, y, bottom_left, bottom_left);
cairo_arc (cr,
x + bottom_left,
y,
bottom_left,
0, M_PI*2);
1 * TAU / 4,
2 * TAU / 4);
corner_path = cairo_copy_path (cr);
cairo_set_source_rgba (cr, 1, 1, 1, 1);
cairo_fill (cr);
}
static cairo_region_t *
scan_visible_region (guchar *mask_data,
int stride,
cairo_region_t *scan_area)
{
int i, n_rects = cairo_region_num_rectangles (scan_area);
MetaRegionBuilder builder;
meta_region_builder_init (&builder);
for (i = 0; i < n_rects; i++)
{
int x, y;
cairo_rectangle_int_t rect;
cairo_region_get_rectangle (scan_area, i, &rect);
for (y = rect.y; y < (rect.y + rect.height); y++)
{
for (x = rect.x; x < (rect.x + rect.width); x++)
{
int w = x;
while (mask_data[y * stride + w] == 255 && w < (rect.x + rect.width))
w++;
if (w > 0)
{
meta_region_builder_add_rectangle (&builder, x, y, w - x, 1);
x = w;
}
}
}
}
return meta_region_builder_finish (&builder);
}
static void
build_and_scan_frame_mask (MetaWindowActor *self,
MetaFrameBorders *borders,
cairo_rectangle_int_t *client_area,
cairo_region_t *shape_region)
{
MetaWindowActorPrivate *priv = self->priv;
guchar *mask_data;
guint tex_width, tex_height;
CoglHandle paint_tex, mask_texture;
int stride;
cairo_t *cr;
cairo_surface_t *surface;
paint_tex = meta_shaped_texture_get_texture (META_SHAPED_TEXTURE (priv->actor));
if (paint_tex == COGL_INVALID_HANDLE)
return;
tex_width = cogl_texture_get_width (paint_tex);
tex_height = cogl_texture_get_height (paint_tex);
stride = cairo_format_stride_for_width (CAIRO_FORMAT_A8, tex_width);
/* Create data for an empty image */
mask_data = g_malloc0 (stride * tex_height);
surface = cairo_image_surface_create_for_data (mask_data,
CAIRO_FORMAT_A8,
tex_width,
tex_height,
stride);
cr = cairo_create (surface);
gdk_cairo_region (cr, shape_region);
cairo_fill (cr);
if (priv->window->frame != NULL)
{
cairo_region_t *frame_paint_region, *scanned_region;
cairo_rectangle_int_t rect = { 0, 0, tex_width, tex_height };
/* Make sure we don't paint the frame over the client window. */
frame_paint_region = cairo_region_create_rectangle (&rect);
cairo_region_subtract_rectangle (frame_paint_region, client_area);
gdk_cairo_region (cr, frame_paint_region);
cairo_clip (cr);
install_corners (priv->window, borders, cr);
cairo_surface_flush (surface);
scanned_region = scan_visible_region (mask_data, stride, frame_paint_region);
cairo_region_union (shape_region, scanned_region);
cairo_region_destroy (scanned_region);
}
cairo_surface_destroy (surface);
cairo_destroy (cr);
cairo_surface_destroy (surface);
corner_region = cairo_region_create_rectangles (corner_rects, 4);
if (meta_texture_rectangle_check (paint_tex))
{
mask_texture = meta_texture_rectangle_new (tex_width, tex_height,
COGL_PIXEL_FORMAT_A_8,
COGL_PIXEL_FORMAT_A_8,
stride,
mask_data,
NULL /* error */);
}
else
{
/* Note: we don't allow slicing for this texture because we
* need to use it with multi-texturing which doesn't support
* sliced textures */
mask_texture = cogl_texture_new_from_data (tex_width, tex_height,
COGL_TEXTURE_NO_SLICING,
COGL_PIXEL_FORMAT_A_8,
COGL_PIXEL_FORMAT_ANY,
stride,
mask_data);
}
meta_shaped_texture_set_overlay_path (META_SHAPED_TEXTURE (priv->actor),
corner_region, corner_path);
cairo_region_destroy (corner_region);
meta_shaped_texture_set_mask_texture (META_SHAPED_TEXTURE (priv->actor),
mask_texture);
cogl_handle_unref (mask_texture);
g_free (mask_data);
}
static void
@ -2183,57 +2216,30 @@ check_needs_reshape (MetaWindowActor *self)
MetaScreen *screen = priv->screen;
MetaDisplay *display = meta_screen_get_display (screen);
MetaFrameBorders borders;
cairo_region_t *region;
cairo_region_t *region = NULL;
cairo_rectangle_int_t client_area;
if (!priv->needs_reshape)
return;
meta_shaped_texture_set_shape_region (META_SHAPED_TEXTURE (priv->actor), NULL);
meta_frame_calc_borders (priv->window->frame, &borders);
client_area.x = borders.total.left;
client_area.y = borders.total.top;
client_area.width = priv->window->rect.width;
client_area.height = priv->window->rect.height;
meta_shaped_texture_set_mask_texture (META_SHAPED_TEXTURE (priv->actor), COGL_INVALID_HANDLE);
meta_window_actor_clear_shape_region (self);
if (priv->window->frame)
meta_frame_calc_borders (priv->window->frame, &borders);
else
meta_frame_borders_clear (&borders);
region = meta_window_get_frame_bounds (priv->window);
if (region != NULL)
{
/* This returns the window's internal frame bounds region,
* so we need to copy it because we modify it below. */
region = cairo_region_copy (region);
}
else
{
/* If we have no region, we have no frame. We have no frame,
* so just use the bounding region instead */
region = cairo_region_copy (priv->bounding_region);
}
#ifdef HAVE_SHAPE
if (priv->window->has_shape)
{
/* Translate the set of XShape rectangles that we
* get from the X server to a cairo_region. */
Display *xdisplay = meta_display_get_xdisplay (display);
XRectangle *rects;
int n_rects, ordering;
cairo_rectangle_int_t client_area;
client_area.width = priv->window->rect.width;
client_area.height = priv->window->rect.height;
if (priv->window->frame)
{
client_area.x = borders.total.left;
client_area.y = borders.total.top;
}
else
{
client_area.x = 0;
client_area.y = 0;
}
/* Punch out client area. */
cairo_region_subtract_rectangle (region, &client_area);
meta_error_trap_push (display);
rects = XShapeGetRectangles (xdisplay,
@ -2246,28 +2252,40 @@ check_needs_reshape (MetaWindowActor *self)
if (rects)
{
int i;
cairo_rectangle_int_t *cairo_rects = g_new (cairo_rectangle_int_t, n_rects);
for (i = 0; i < n_rects; i ++)
{
cairo_rectangle_int_t rect = { rects[i].x + client_area.x,
rects[i].y + client_area.y,
rects[i].width,
rects[i].height };
cairo_region_union_rectangle (region, &rect);
cairo_rects[i].x = rects[i].x + client_area.x;
cairo_rects[i].y = rects[i].y + client_area.y;
cairo_rects[i].width = rects[i].width;
cairo_rects[i].height = rects[i].height;
}
XFree (rects);
region = cairo_region_create_rectangles (cairo_rects, n_rects);
g_free (cairo_rects);
}
}
#endif
meta_shaped_texture_set_shape_region (META_SHAPED_TEXTURE (priv->actor),
region);
if (region == NULL)
{
/* If we don't have a shape on the server, that means that
* we have an implicit shape of one rectangle covering the
* entire window. */
region = cairo_region_create_rectangle (&client_area);
}
/* This takes the region, generates a mask using GTK+
* and scans the mask looking for all opaque pixels,
* adding it to region.
*/
build_and_scan_frame_mask (self, &borders, &client_area, region);
meta_window_actor_update_shape_region (self, region);
cairo_region_destroy (region);
update_corners (self, &borders);
priv->needs_reshape = FALSE;
meta_window_actor_invalidate_shadow (self);
}

View File

@ -101,25 +101,6 @@ actor_is_untransformed (ClutterActor *actor,
return TRUE;
}
#if CLUTTER_CHECK_VERSION(1, 9, 0)
#define has_effects clutter_actor_has_effects
#else
static gboolean
has_effects(ClutterActor *actor)
{
GList *list;
gboolean ret;
list = clutter_actor_get_effects (actor);
ret = list != NULL;
g_list_free (list);
return ret;
}
#endif
static void
meta_window_group_paint (ClutterActor *actor)
{
@ -180,7 +161,7 @@ meta_window_group_paint (ClutterActor *actor)
* as well for the same reason, but omitted for simplicity in the
* hopes that no-one will do that.
*/
if (has_effects (l->data))
if (clutter_actor_has_effects (l->data))
continue;
if (META_IS_WINDOW_ACTOR (l->data))
@ -228,7 +209,6 @@ meta_window_group_paint (ClutterActor *actor)
if (META_IS_WINDOW_ACTOR (l->data))
{
MetaWindowActor *window_actor = l->data;
window_actor = l->data;
meta_window_actor_reset_visible_regions (window_actor);
}
else if (META_IS_BACKGROUND_ACTOR (l->data))

View File

@ -16,3 +16,9 @@ pkglib_LTLIBRARIES = default.la
install-exec-hook:
-rm $(DESTDIR)$(pkglibdir)/*.a
-rm $(DESTDIR)$(pkglibdir)/*.la
# Since we removed the .la file, 'make uninstall' doesn't work properly,
# since it counts on libtool to remove the .la files, so just kill the
# .so file manually.
uninstall-local:
-rm -f $(DESTDIR)$(pkglibdir)/default.so

View File

@ -112,8 +112,6 @@ struct _MetaDefaultPluginPrivate
ClutterActor *desktop2;
MetaPluginInfo info;
gboolean debug_mode : 1;
};
/*
@ -182,34 +180,6 @@ meta_default_plugin_get_property (GObject *object,
}
}
static void
start (MetaPlugin *plugin)
{
MetaDefaultPluginPrivate *priv = META_DEFAULT_PLUGIN (plugin)->priv;
guint destroy_timeout = DESTROY_TIMEOUT;
guint minimize_timeout = MINIMIZE_TIMEOUT;
guint maximize_timeout = MAXIMIZE_TIMEOUT;
guint map_timeout = MAP_TIMEOUT;
guint switch_timeout = SWITCH_TIMEOUT;
if (meta_plugin_debug_mode (plugin))
{
g_debug ("Plugin %s: Entering debug mode.", priv->info.name);
priv->debug_mode = TRUE;
/*
* Double the effect duration to make them easier to observe.
*/
destroy_timeout *= 2;
minimize_timeout *= 2;
maximize_timeout *= 2;
map_timeout *= 2;
switch_timeout *= 2;
}
}
static void
meta_default_plugin_class_init (MetaDefaultPluginClass *klass)
{
@ -221,7 +191,6 @@ meta_default_plugin_class_init (MetaDefaultPluginClass *klass)
gobject_class->set_property = meta_default_plugin_set_property;
gobject_class->get_property = meta_default_plugin_get_property;
plugin_class->start = start;
plugin_class->map = map;
plugin_class->minimize = minimize;
plugin_class->maximize = maximize;
@ -284,7 +253,8 @@ on_switch_workspace_effect_complete (ClutterTimeline *timeline, gpointer data)
{
MetaPlugin *plugin = META_PLUGIN (data);
MetaDefaultPluginPrivate *priv = META_DEFAULT_PLUGIN (plugin)->priv;
GList *l = meta_plugin_get_window_actors (plugin);
MetaScreen *screen = meta_plugin_get_screen (plugin);
GList *l = meta_get_window_actors (screen);
while (l)
{
@ -317,6 +287,7 @@ switch_workspace (MetaPlugin *plugin,
gint from, gint to,
MetaMotionDirection direction)
{
MetaScreen *screen;
MetaDefaultPluginPrivate *priv = META_DEFAULT_PLUGIN (plugin)->priv;
GList *l;
ClutterActor *workspace0 = clutter_group_new ();
@ -325,11 +296,13 @@ switch_workspace (MetaPlugin *plugin,
int screen_width, screen_height;
ClutterAnimation *animation;
stage = meta_plugin_get_stage (plugin);
screen = meta_plugin_get_screen (plugin);
stage = meta_get_stage_for_screen (screen);
meta_screen_get_size (screen,
&screen_width,
&screen_height);
meta_plugin_query_screen_size (plugin,
&screen_width,
&screen_height);
clutter_actor_set_anchor_point (workspace1,
screen_width,
screen_height);
@ -348,7 +321,7 @@ switch_workspace (MetaPlugin *plugin,
return;
}
l = g_list_last (meta_plugin_get_window_actors (plugin));
l = g_list_last (meta_get_window_actors (screen));
while (l)
{
@ -446,12 +419,19 @@ static void
minimize (MetaPlugin *plugin, MetaWindowActor *window_actor)
{
MetaWindowType type;
MetaRectangle icon_geometry;
MetaWindow *meta_window = meta_window_actor_get_meta_window (window_actor);
ClutterActor *actor = CLUTTER_ACTOR (window_actor);
type = meta_window_get_window_type (meta_window);
if (!meta_window_get_icon_geometry(meta_window, &icon_geometry))
{
icon_geometry.x = 0;
icon_geometry.y = 0;
}
if (type == META_WINDOW_NORMAL)
{
ClutterAnimation *animation;
@ -468,6 +448,8 @@ minimize (MetaPlugin *plugin, MetaWindowActor *window_actor)
MINIMIZE_TIMEOUT,
"scale-x", 0.0,
"scale-y", 0.0,
"x", (double)icon_geometry.x,
"y", (double)icon_geometry.y,
NULL);
apriv->tml_minimize = clutter_animation_get_timeline (animation);
data->plugin = plugin;

View File

@ -43,34 +43,17 @@
/* Optimium performance seems to be with MAX_CHUNK_RECTANGLES=4; 8 is about 10% slower.
* But using 8 may be more robust to systems with slow malloc(). */
#define MAX_CHUNK_RECTANGLES 8
#define MAX_LEVELS 16
typedef struct
{
/* To merge regions in binary tree order, we need to keep track of
* the regions that we've already merged together at different
* levels of the tree. We fill in an array in the pattern:
*
* |a |
* |b |a |
* |c | |ab |
* |d |c |ab |
* |e | | |abcd|
*/
cairo_region_t *levels[MAX_LEVELS];
int n_levels;
} MetaRegionBuilder;
static void
void
meta_region_builder_init (MetaRegionBuilder *builder)
{
int i;
for (i = 0; i < MAX_LEVELS; i++)
for (i = 0; i < META_REGION_BUILDER_MAX_LEVELS; i++)
builder->levels[i] = NULL;
builder->n_levels = 1;
}
static void
void
meta_region_builder_add_rectangle (MetaRegionBuilder *builder,
int x,
int y,
@ -95,7 +78,7 @@ meta_region_builder_add_rectangle (MetaRegionBuilder *builder,
{
if (builder->levels[i] == NULL)
{
if (i < MAX_LEVELS)
if (i < META_REGION_BUILDER_MAX_LEVELS)
{
builder->levels[i] = builder->levels[i - 1];
builder->levels[i - 1] = NULL;
@ -115,7 +98,7 @@ meta_region_builder_add_rectangle (MetaRegionBuilder *builder,
}
}
static cairo_region_t *
cairo_region_t *
meta_region_builder_finish (MetaRegionBuilder *builder)
{
cairo_region_t *result = NULL;

View File

@ -63,6 +63,32 @@ struct _MetaRegionIterator {
cairo_rectangle_int_t next_rectangle;
};
typedef struct _MetaRegionBuilder MetaRegionBuilder;
#define META_REGION_BUILDER_MAX_LEVELS 16
struct _MetaRegionBuilder {
/* To merge regions in binary tree order, we need to keep track of
* the regions that we've already merged together at different
* levels of the tree. We fill in an array in the pattern:
*
* |a |
* |b |a |
* |c | |ab |
* |d |c |ab |
* |e | | |abcd|
*/
cairo_region_t *levels[META_REGION_BUILDER_MAX_LEVELS];
int n_levels;
};
void meta_region_builder_init (MetaRegionBuilder *builder);
void meta_region_builder_add_rectangle (MetaRegionBuilder *builder,
int x,
int y,
int width,
int height);
cairo_region_t * meta_region_builder_finish (MetaRegionBuilder *builder);
void meta_region_iterator_init (MetaRegionIterator *iter,
cairo_region_t *region);
gboolean meta_region_iterator_at_end (MetaRegionIterator *iter);

View File

@ -23,7 +23,8 @@
*/
/**
* \file bell.c Ring the bell or flash the screen
* SECTION:Bell
* @short_description: Ring the bell or flash the screen
*
* Sometimes, X programs "ring the bell", whatever that means. Mutter lets
* the user configure the bell to be audible or visible (aka visual), and
@ -57,6 +58,10 @@
#endif
/**
* bell_flash_screen:
* @display: The display which owns the screen (rather redundant)
* @screen: The screen to flash
*
* Flashes one entire screen. This is done by making a window the size of the
* whole screen (or reusing the old one, if it's still around), mapping it,
* painting it white and then black, and then unmapping it. We set saveunder so
@ -65,14 +70,12 @@
* Unlike frame flashes, we don't do fullscreen flashes with a timeout; rather,
* we do them in one go, because we don't have to rely on the theme code
* redrawing the frame for us in order to do the flash.
*
* \param display The display which owns the screen (rather redundant)
* \param screen The screen to flash
*
* \bug The way I read it, this appears not to do the flash
*/
/*
* Bug: The way I read it, this appears not to do the flash
* the first time we flash a particular display. Am I wrong?
*
* \bug This appears to destroy our current XSync status.
* Bug: This appears to destroy our current XSync status.
*/
static void
bell_flash_screen (MetaDisplay *display,
@ -137,14 +140,15 @@ bell_flash_screen (MetaDisplay *display,
}
/**
* bell_flash_fullscreen:
* @display: The display the event came in on
* @xkb_ev: The bell event
*
* Flashes one screen, or all screens, in response to a bell event.
* If the event is on a particular window, flash the screen that
* window is on. Otherwise, flash every screen on this display.
*
* If the configure script found we had no XKB, this does not exist.
*
* \param display The display the event came in on
* \param xkb_ev The bell event
*/
#ifdef HAVE_XKB
static void
@ -182,17 +186,21 @@ bell_flash_fullscreen (MetaDisplay *display,
}
/**
* bell_unflash_frame:
* @data: The frame to unflash, cast to a gpointer so it can go into
* a callback function.
*
* Makes a frame be not flashed; this is the timeout half of
* bell_flash_window_frame(). This is done simply by clearing the
* flash flag and queuing a redraw of the frame.
*
* If the configure script found we had no XKB, this does not exist.
*
* \param data The frame to unflash, cast to a gpointer so it can go into
* a callback function.
* \return Always FALSE, so we don't get called again.
*
* \bug This is the parallel to bell_flash_window_frame(), so it should
* Returns: Always FALSE, so we don't get called again.
*/
/*
* Bug: This is the parallel to bell_flash_window_frame(), so it should
* really be called meta_bell_unflash_window_frame().
*/
static gboolean
@ -205,6 +213,9 @@ bell_unflash_frame (gpointer data)
}
/**
* bell_flash_window_frame:
* @window: The window to flash
*
* Makes a frame flash and then return to normal shortly afterwards.
* This is done by setting a flag so that the theme
* code will temporarily draw the frame as focussed if it's unfocussed and
@ -212,8 +223,6 @@ bell_unflash_frame (gpointer data)
* that the flag can be unset and the frame re-redrawn.
*
* If the configure script found we had no XKB, this does not exist.
*
* \param window The window to flash
*/
static void
bell_flash_window_frame (MetaWindow *window)
@ -231,11 +240,12 @@ bell_flash_window_frame (MetaWindow *window)
}
/**
* bell_flash_frame:
* @display: The display the bell event came in on
* @xkb_ev: The bell event we just received
*
* Flashes the frame of the focussed window. If there is no focussed window,
* flashes the screen.
*
* \param display The display the bell event came in on
* \param xkb_ev The bell event we just received
*/
static void
bell_flash_frame (MetaDisplay *display,
@ -261,15 +271,18 @@ bell_flash_frame (MetaDisplay *display,
}
/**
* bell_visual_notify:
* @display: The display the bell event came in on
* @xkb_ev: The bell event we just received
*
* Gives the user some kind of visual bell substitute, in response to a
* bell event. What this is depends on the "visual bell type" pref.
*
* If the configure script found we had no XKB, this does not exist.
*
* \param display The display the bell event came in on
* \param xkb_ev The bell event we just received
*
* \bug This should be merged with meta_bell_notify().
*/
/*
* Bug: This should be merged with meta_bell_notify().
*/
static void
bell_visual_notify (MetaDisplay *display,
@ -407,12 +420,13 @@ meta_bell_shutdown (MetaDisplay *display)
}
/**
* meta_bell_notify_frame_destroy:
* @frame: The frame which is being destroyed
*
* Deals with a frame being destroyed. This is important because if we're
* using a visual bell, we might be flashing the edges of the frame, and
* so we'd have a timeout function waiting ready to un-flash them. If the
* frame's going away, we can tell the timeout not to bother.
*
* \param frame The frame which is being destroyed
*/
void
meta_bell_notify_frame_destroy (MetaFrame *frame)

View File

@ -1,17 +1,5 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/**
* \file bell.h Ring the bell or flash the screen
*
* Sometimes, X programs "ring the bell", whatever that means. Mutter lets
* the user configure the bell to be audible or visible (aka visual), and
* if it's visual it can be configured to be frame-flash or fullscreen-flash.
* We never get told about audible bells; X handles them just fine by itself.
*
* The visual bell was the result of a discussion in Bugzilla here:
* <http://bugzilla.gnome.org/show_bug.cgi?id=99886>.
*/
/*
* Copyright (C) 2002 Sun Microsystems Inc.
*

View File

@ -625,7 +625,6 @@ meta_rectangle_get_minimal_spanning_set_for_region (
*temp_rect = *basic_rect;
ret = g_list_prepend (NULL, temp_rect);
strut_iter = all_struts;
for (strut_iter = all_struts; strut_iter; strut_iter = strut_iter->next)
{
GList *rect_iter;

View File

@ -119,6 +119,7 @@ typedef struct
MetaRectangle orig;
MetaRectangle current;
MetaFrameBorders *borders;
gboolean must_free_borders;
ActionType action_type;
gboolean is_user_action;
@ -337,7 +338,7 @@ meta_window_constrain (MetaWindow *window,
* not gobject-style--gobject would be more pain than it's worth) or
* smart pointers would be so much nicer here. *shrug*
*/
if (!orig_borders)
if (info.must_free_borders)
g_free (info.borders);
}
@ -358,9 +359,15 @@ setup_constraint_info (ConstraintInfo *info,
/* Create a fake frame geometry if none really exists */
if (orig_borders && !window->fullscreen)
info->borders = orig_borders;
{
info->borders = orig_borders;
info->must_free_borders = FALSE;
}
else
info->borders = g_new0 (MetaFrameBorders, 1);
{
info->borders = g_new0 (MetaFrameBorders, 1);
info->must_free_borders = TRUE;
}
if (flags & META_IS_MOVE_ACTION && flags & META_IS_RESIZE_ACTION)
info->action_type = ACTION_MOVE_AND_RESIZE;
@ -573,7 +580,7 @@ place_window_if_needed(MetaWindow *window,
META_MAXIMIZE_VERTICAL : 0), &info->current);
/* maximization may have changed frame geometry */
if (window->frame && !window->fullscreen)
if (!window->fullscreen)
meta_frame_calc_borders (window->frame, info->borders);
if (window->fullscreen_after_placement)
@ -757,21 +764,12 @@ constrain_modal_dialog (MetaWindow *window,
return TRUE;
x = parent->rect.x + (parent->rect.width / 2 - info->current.width / 2);
y = 0;
y = parent->rect.y + (parent->rect.height / 2 - info->current.height / 2);
if (parent->frame)
{
MetaFrameBorders borders;
x += parent->frame->rect.x;
y += parent->frame->rect.y;
meta_frame_calc_borders (parent->frame, &borders);
y += borders.total.top;
y += info->borders->visible.top;
}
else
y = parent->rect.y + info->borders->visible.top;
constraint_already_satisfied = (x == info->current.x) && (y == info->current.y);

View File

@ -108,8 +108,12 @@ delete_ping_timeout_func (MetaDisplay *display,
/* Translators: %s is a window title */
if (window_title)
tmp = g_markup_printf_escaped (_("<tt>%s</tt> is not responding."),
window_title);
{
gchar *bold;
bold = g_strconcat ("<tt>", window_title, "</tt>", NULL);
tmp = g_markup_printf_escaped (_("%s is not responding."), bold);
g_free (bold);
}
else
tmp = g_strdup (_("Application is not responding."));

View File

@ -25,9 +25,10 @@
*/
/**
* \file display.c Handles operations on an X display.
* SECTION:MetaDisplay
* @short_description: Handles operations on an X display.
*
* The display is represented as a MetaDisplay struct.
* The display is represented as a #MetaDisplay struct.
*/
#define _XOPEN_SOURCE 600 /* for gethostname() */
@ -51,12 +52,8 @@
#include <meta/compositor.h>
#include <X11/Xatom.h>
#include <X11/cursorfont.h>
#ifdef HAVE_SOLARIS_XINERAMA
#include <X11/extensions/xinerama.h>
#endif
#ifdef HAVE_XFREE_XINERAMA
#include <X11/extensions/Xinerama.h>
#endif
#include "mutter-enum-types.h"
#ifdef HAVE_RANDR
#include <X11/extensions/Xrandr.h>
#endif
@ -85,7 +82,7 @@
g == META_GRAB_OP_KEYBOARD_ESCAPING_GROUP)
/**
* \defgroup pings Pings
* SECTION:pings
*
* Sometimes we want to see whether a window is responding,
* so we send it a "ping" message and see whether it sends us back a "pong"
@ -100,13 +97,13 @@
*/
/**
* MetaPingData:
*
* Describes a ping on a window. When we send a ping to a window, we build
* one of these structs, and it eventually gets passed to the timeout function
* or to the function which handles the response from the window. If the window
* does or doesn't respond to the ping, we use this information to deal with
* these facts; we have a handler function for each.
*
* \ingroup pings
*/
typedef struct
{
@ -135,6 +132,8 @@ enum
WINDOW_CREATED,
WINDOW_DEMANDS_ATTENTION,
WINDOW_MARKED_URGENT,
GRAB_OP_BEGIN,
GRAB_OP_END,
LAST_SIGNAL
};
@ -146,7 +145,7 @@ enum {
static guint display_signals [LAST_SIGNAL] = { 0 };
/**
/*
* The display we're managing. This is a singleton object. (Historically,
* this was a list of displays, but there was never any way to add more
* than one element to it.) The goofy name is because we don't want it
@ -181,7 +180,7 @@ static void prefs_changed_callback (MetaPreference pref,
static void sanity_check_timestamps (MetaDisplay *display,
guint32 known_good_timestamp);
MetaGroup* get_focussed_group (MetaDisplay *display);
static void
@ -258,6 +257,28 @@ meta_display_class_init (MetaDisplayClass *klass)
G_TYPE_NONE, 1,
META_TYPE_WINDOW);
display_signals[GRAB_OP_BEGIN] =
g_signal_new ("grab-op-begin",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 3,
META_TYPE_SCREEN,
META_TYPE_WINDOW,
META_TYPE_GRAB_OP);
display_signals[GRAB_OP_END] =
g_signal_new ("grab-op-end",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 3,
META_TYPE_SCREEN,
META_TYPE_WINDOW,
META_TYPE_GRAB_OP);
g_object_class_install_property (object_class,
PROP_FOCUS_WINDOW,
g_param_spec_object ("focus-window",
@ -269,10 +290,10 @@ meta_display_class_init (MetaDisplayClass *klass)
/**
* Destructor for MetaPingData structs. Will destroy the
* event source for the struct as well.
* ping_data_free:
*
* \ingroup pings
* Destructor for #MetaPingData structs. Will destroy the
* event source for the struct as well.
*/
static void
ping_data_free (MetaPingData *ping_data)
@ -285,14 +306,12 @@ ping_data_free (MetaPingData *ping_data)
}
/**
* remove_pending_pings_for_window:
* @display: The display the window appears on
* @xwindow: The X ID of the window whose pings we should remove
*
* Frees every pending ping structure for the given X window on the
* given display. This means that we also destroy the timeouts.
*
* \param display The display the window appears on
* \param xwindow The X ID of the window whose pings we should remove
*
* \ingroup pings
*
*/
static void
remove_pending_pings_for_window (MetaDisplay *display, Window xwindow)
@ -391,14 +410,14 @@ meta_display_init (MetaDisplay *disp)
}
/**
* meta_display_open:
*
* Opens a new display, sets it up, initialises all the X extensions
* we will need, and adds it to the list of displays.
*
* \return True if the display was opened successfully, and False
* Returns: %TRUE if the display was opened successfully, and %FALSE
* otherwise-- that is, if the display doesn't exist or it already
* has a window manager.
*
* \ingroup main
*/
gboolean
meta_display_open (void)
@ -448,6 +467,8 @@ meta_display_open (void)
buf[sizeof(buf)-1] = '\0';
the_display->hostname = g_strdup (buf);
}
else
the_display->hostname = NULL;
the_display->error_trap_synced_at_last_pop = TRUE;
the_display->error_traps = 0;
the_display->error_trap_handler = NULL;
@ -1025,6 +1046,7 @@ meta_display_close (MetaDisplay *display,
meta_display_free_window_prop_hooks (display);
meta_display_free_group_prop_hooks (display);
g_free (display->hostname);
g_free (display->name);
meta_display_shutdown_keys (display);
@ -1142,14 +1164,16 @@ meta_display_ungrab (MetaDisplay *display)
}
/**
* Returns the singleton MetaDisplay if "xdisplay" matches the X display it's
* managing; otherwise gives a warning and returns NULL. When we were claiming
* meta_display_for_x_display:
* @xdisplay: An X display
*
* Returns the singleton MetaDisplay if @xdisplay matches the X display it's
* managing; otherwise gives a warning and returns %NULL. When we were claiming
* to be able to manage multiple displays, this was supposed to find the
* display out of the list which matched that display. Now it's merely an
* extra sanity check.
*
* \param xdisplay An X display
* \return The singleton X display, or NULL if "xdisplay" isn't the one
* Returns: The singleton X display, or %NULL if @xdisplay isn't the one
* we're managing.
*/
MetaDisplay*
@ -1165,9 +1189,11 @@ meta_display_for_x_display (Display *xdisplay)
}
/**
* meta_get_display:
*
* Accessor for the singleton MetaDisplay.
*
* \return The only MetaDisplay there is. This can be NULL, but only
* Returns: The only #MetaDisplay there is. This can be %NULL, but only
* during startup.
*/
MetaDisplay*
@ -1380,6 +1406,19 @@ meta_display_get_current_time_roundtrip (MetaDisplay *display)
return timestamp;
}
/**
* meta_display_get_ignored_modifier_mask:
* @display: a #MetaDisplay
*
* Returns: a mask of modifiers that should be ignored
* when matching keybindings to events
*/
unsigned int
meta_display_get_ignored_modifier_mask (MetaDisplay *display)
{
return display->ignored_modifier_mask;
}
/**
* meta_display_add_ignored_crossing_serial:
* @display: a #MetaDisplay
@ -1562,19 +1601,18 @@ handle_net_restack_window (MetaDisplay* display,
#endif
/**
* event_callback:
* @event: The event that just happened
* @data: The #MetaDisplay that events are coming from, cast to a gpointer
* so that it can be sent to a callback
*
* This is the most important function in the whole program. It is the heart,
* it is the nexus, it is the Grand Central Station of Mutter's world.
* When we create a MetaDisplay, we ask GDK to pass *all* events for *all*
* When we create a #MetaDisplay, we ask GDK to pass *all* events for *all*
* windows to this function. So every time anything happens that we might
* want to know about, this function gets called. You see why it gets a bit
* busy around here. Most of this function is a ginormous switch statement
* dealing with all the kinds of events that might turn up.
*
* \param event The event that just happened
* \param data The MetaDisplay that events are coming from, cast to a gpointer
* so that it can be sent to a callback
*
* \ingroup main
*/
static gboolean
event_callback (XEvent *event,
@ -1760,6 +1798,8 @@ event_callback (XEvent *event,
if (display->grab_op == META_GRAB_OP_COMPOSITOR)
break;
display->overlay_key_only_pressed = FALSE;
if (event->xbutton.button == 4 || event->xbutton.button == 5)
/* Scrollwheel event, do nothing and deliver event to compositor below */
break;
@ -1957,6 +1997,8 @@ event_callback (XEvent *event,
if (display->grab_op == META_GRAB_OP_COMPOSITOR)
break;
display->overlay_key_only_pressed = FALSE;
if (display->grab_window == window &&
grab_op_is_mouse (display->grab_op))
meta_window_handle_mouse_grab_op_event (window, event);
@ -3702,6 +3744,9 @@ meta_display_begin_grab_op (MetaDisplay *display,
{
meta_window_refresh_resize_popup (display->grab_window);
}
g_signal_emit (display, display_signals[GRAB_OP_BEGIN], 0,
screen, display->grab_window, display->grab_op);
return TRUE;
}
@ -3716,6 +3761,11 @@ meta_display_end_grab_op (MetaDisplay *display,
if (display->grab_op == META_GRAB_OP_NONE)
return;
g_signal_emit (display, display_signals[GRAB_OP_END], 0,
display->grab_screen, display->grab_window, display->grab_op);
display->grab_frame_action = FALSE;
if (display->grab_window != NULL)
display->grab_window->shaken_loose = FALSE;
@ -4148,21 +4198,23 @@ meta_display_set_cursor_theme (const char *theme,
#endif
}
/**
/*
* Stores whether syncing is currently enabled.
*/
static gboolean is_syncing = FALSE;
/**
* meta_is_syncing:
*
* Returns whether X synchronisation is currently enabled.
*
* \return true if we must wait for events whenever we send X requests;
* false otherwise.
*
* \bug This is *only* called by meta_display_open, but by that time
* FIXME: This is *only* called by meta_display_open(), but by that time
* we have already turned syncing on or off on startup, and we don't
* have any way to do so while Mutter is running, so it's rather
* pointless.
*
* Returns: %TRUE if we must wait for events whenever we send X requests;
* %FALSE otherwise.
*/
gboolean
meta_is_syncing (void)
@ -4171,10 +4223,9 @@ meta_is_syncing (void)
}
/**
* A handy way to turn on synchronisation on or off for every display.
* meta_set_syncing:
*
* \bug Of course there is only one display ever anyway, so this can
* be rather hugely simplified.
* A handy way to turn on synchronisation on or off for every display.
*/
void
meta_set_syncing (gboolean setting)
@ -4187,26 +4238,25 @@ meta_set_syncing (gboolean setting)
}
}
/**
/*
* How long, in milliseconds, we should wait after pinging a window
* before deciding it's not going to get back to us.
*/
#define PING_TIMEOUT_DELAY 5000
/**
* meta_display_ping_timeout:
* @data: All the information about this ping. It is a #MetaPingData
* cast to a #gpointer in order to be passable to a timeout function.
* This function will also free this parameter.
*
* Does whatever it is we decided to do when a window didn't respond
* to a ping. We also remove the ping from the display's list of
* pending pings. This function is called by the event loop when the timeout
* times out which we created at the start of the ping.
*
* \param data All the information about this ping. It is a MetaPingData
* cast to a void* in order to be passable to a timeout function.
* This function will also free this parameter.
*
* \return Always returns false, because this function is called as a
* timeout and we don't want to run the timer again.
*
* \ingroup pings
* Returns: Always returns %FALSE, because this function is called as a
* timeout and we don't want to run the timer again.
*/
static gboolean
meta_display_ping_timeout (gpointer data)
@ -4233,6 +4283,17 @@ meta_display_ping_timeout (gpointer data)
}
/**
* meta_display_ping_window:
* @display: The #MetaDisplay that the window is on
* @window: The #MetaWindow to send the ping to
* @timestamp: The timestamp of the ping. Used for uniqueness.
* Cannot be CurrentTime; use a real timestamp!
* @ping_reply_func: The callback to call if we get a response.
* @ping_timeout_func: The callback to call if we don't get a response.
* @user_data: Arbitrary data that will be passed to the callback
* function. (In practice it's often a pointer to
* the window.)
*
* Sends a ping request to a window. The window must respond to
* the request within a certain amount of time. If it does, we
* will call one callback; if the time passes and we haven't had
@ -4242,20 +4303,9 @@ meta_display_ping_timeout (gpointer data)
* This function returns straight away after setting things up;
* the callbacks will be called from the event loop.
*
* \param display The MetaDisplay that the window is on
* \param window The MetaWindow to send the ping to
* \param timestamp The timestamp of the ping. Used for uniqueness.
* Cannot be CurrentTime; use a real timestamp!
* \param ping_reply_func The callback to call if we get a response.
* \param ping_timeout_func The callback to call if we don't get a response.
* \param user_data Arbitrary data that will be passed to the callback
* function. (In practice it's often a pointer to
* the window.)
* FIXME: This should probably be a method on windows, rather than displays
* for one of their windows.
*
* \bug This should probably be a method on windows, rather than displays
* for one of their windows.
*
* \ingroup pings
*/
void
meta_display_ping_window (MetaDisplay *display,
@ -4363,16 +4413,15 @@ process_request_frame_extents (MetaDisplay *display,
}
/**
* process_pong_message:
* @display: the display we got the pong from
* @event: the #XEvent which is a pong; we can tell which
* ping it corresponds to because it bears the
* same timestamp.
*
* Process the pong (the response message) from the ping we sent
* to the window. This involves removing the timeout, calling the
* reply handler function, and freeing memory.
*
* \param display the display we got the pong from
* \param event the XEvent which is a pong; we can tell which
* ping it corresponds to because it bears the
* same timestamp.
*
* \ingroup pings
*/
static void
process_pong_message (MetaDisplay *display,
@ -4419,18 +4468,17 @@ process_pong_message (MetaDisplay *display,
}
/**
* meta_display_window_has_pending_pings:
* @display: The #MetaDisplay of the window.
* @window: The #MetaWindow whose pings we want to know about.
*
* Finds whether a window has any pings waiting on it.
*
* \param display The MetaDisplay of the window.
* \param window The MetaWindow whose pings we want to know about.
* FIXME: This should probably be a method on windows, rather than displays
* for one of their windows.
*
* \return True if there is at least one ping which has been sent
* to the window without getting a response; false otherwise.
*
* \bug This should probably be a method on windows, rather than displays
* for one of their windows.
*
* \ingroup pings
* Returns: %TRUE if there is at least one ping which has been sent
* to the window without getting a response; %FALSE otherwise.
*/
gboolean
meta_display_window_has_pending_pings (MetaDisplay *display,
@ -4460,7 +4508,8 @@ get_focussed_group (MetaDisplay *display)
#define IN_TAB_CHAIN(w,t) (((t) == META_TAB_LIST_NORMAL && META_WINDOW_IN_NORMAL_TAB_CHAIN (w)) \
|| ((t) == META_TAB_LIST_DOCKS && META_WINDOW_IN_DOCK_TAB_CHAIN (w)) \
|| ((t) == META_TAB_LIST_GROUP && META_WINDOW_IN_GROUP_TAB_CHAIN (w, get_focussed_group(w->display))))
|| ((t) == META_TAB_LIST_GROUP && META_WINDOW_IN_GROUP_TAB_CHAIN (w, get_focussed_group(w->display))) \
|| ((t) == META_TAB_LIST_NORMAL_ALL && META_WINDOW_IN_NORMAL_TAB_CHAIN_TYPE (w)))
static MetaWindow*
find_tab_forward (MetaDisplay *display,
@ -4608,12 +4657,13 @@ meta_display_get_tab_list (MetaDisplay *display,
tab_list = g_list_reverse (tab_list);
{
GSList *tmp;
GSList *windows, *tmp;
MetaWindow *l_window;
tmp = meta_display_list_windows (display, META_LIST_DEFAULT);
windows = meta_display_list_windows (display, META_LIST_DEFAULT);
/* Go through all windows */
tmp = windows;
while (tmp != NULL)
{
l_window=tmp->data;
@ -4629,6 +4679,8 @@ meta_display_get_tab_list (MetaDisplay *display,
tmp = tmp->next;
} /* End while tmp!=NULL */
g_slist_free (windows);
}
return tab_list;
@ -5025,12 +5077,21 @@ meta_display_unmanage_windows_for_screen (MetaDisplay *display,
winlist = meta_display_list_windows (display,
META_LIST_INCLUDE_OVERRIDE_REDIRECT);
winlist = g_slist_sort (winlist, meta_display_stack_cmp);
g_slist_foreach (winlist, (GFunc)g_object_ref, NULL);
/* Unmanage all windows */
tmp = winlist;
while (tmp != NULL)
{
meta_window_unmanage (tmp->data, timestamp);
MetaWindow *window = tmp->data;
/* Check if already unmanaged for safety - in particular, catch
* the case where unmanaging a parent window can cause attached
* dialogs to be (temporarily) unmanaged.
*/
if (!window->unmanaging)
meta_window_unmanage (window, timestamp);
g_object_unref (window);
tmp = tmp->next;
}
@ -5273,7 +5334,6 @@ timestamp_too_old (MetaDisplay *display,
meta_warning ("Got a request to focus %s with a timestamp of 0. This "
"shouldn't happen!\n",
window ? window->desc : "the no_focus_window");
meta_print_backtrace ();
*timestamp = meta_display_get_current_time_roundtrip (display);
return FALSE;
}
@ -5477,3 +5537,18 @@ meta_display_get_leader_window (MetaDisplay *display)
{
return display->leader_window;
}
/**
* meta_display_clear_mouse_mode:
* @display: a #MetaDisplay
*
* Sets the mouse-mode flag to %FALSE, which means that motion events are
* no longer ignored in mouse or sloppy focus.
* This is an internal function. It should be used only for reimplementing
* keybindings, and only in a manner compatible with core code.
*/
void
meta_display_clear_mouse_mode (MetaDisplay *display)
{
display->mouse_mode = FALSE;
}

View File

@ -322,9 +322,14 @@ void
meta_frame_calc_borders (MetaFrame *frame,
MetaFrameBorders *borders)
{
meta_ui_get_frame_borders (frame->window->screen->ui,
frame->xwindow,
borders);
/* Save on if statements and potential uninitialized values
* in callers -- if there's no frame, then zero the borders. */
if (frame == NULL)
meta_frame_borders_clear (borders);
else
meta_ui_get_frame_borders (frame->window->screen->ui,
frame->xwindow,
borders);
}
void

View File

@ -29,6 +29,7 @@
#ifndef META_KEYBINDINGS_PRIVATE_H
#define META_KEYBINDINGS_PRIVATE_H
#include <gio/gio.h>
#include <meta/keybindings.h>
struct _MetaKeyHandler
@ -73,7 +74,7 @@ void meta_display_process_mapping_event (MetaDisplay *display,
XEvent *event);
gboolean meta_prefs_add_keybinding (const char *name,
const char *schema,
GSettings *settings,
MetaKeyBindingAction action,
MetaKeyBindingFlags flags);

View File

@ -53,7 +53,7 @@ static gboolean all_bindings_disabled = FALSE;
static gboolean add_builtin_keybinding (MetaDisplay *display,
const char *name,
const char *schema,
GSettings *settings,
MetaKeyBindingFlags flags,
MetaKeyBindingAction action,
MetaKeyHandlerFunc handler,
@ -71,18 +71,10 @@ meta_key_binding_copy (MetaKeyBinding *binding)
return g_slice_dup (MetaKeyBinding, binding);
}
GType
meta_key_binding_get_type (void)
{
static GType type_id = 0;
if (G_UNLIKELY (type_id == 0))
type_id = g_boxed_type_register_static (g_intern_static_string ("MetaKeyBinding"),
(GBoxedCopyFunc)meta_key_binding_copy,
(GBoxedFreeFunc)meta_key_binding_free);
return type_id;
}
G_DEFINE_BOXED_TYPE(MetaKeyBinding,
meta_key_binding,
meta_key_binding_copy,
meta_key_binding_free)
const char *
meta_key_binding_get_name (MetaKeyBinding *binding)
@ -546,7 +538,7 @@ display_get_keybinding (MetaDisplay *display,
static gboolean
add_keybinding_internal (MetaDisplay *display,
const char *name,
const char *schema,
GSettings *settings,
MetaKeyBindingFlags flags,
MetaKeyBindingAction action,
MetaKeyHandlerFunc func,
@ -556,7 +548,7 @@ add_keybinding_internal (MetaDisplay *display,
{
MetaKeyHandler *handler;
if (!meta_prefs_add_keybinding (name, schema, action, flags))
if (!meta_prefs_add_keybinding (name, settings, action, flags))
return FALSE;
handler = g_new0 (MetaKeyHandler, 1);
@ -576,13 +568,13 @@ add_keybinding_internal (MetaDisplay *display,
static gboolean
add_builtin_keybinding (MetaDisplay *display,
const char *name,
const char *schema,
GSettings *settings,
MetaKeyBindingFlags flags,
MetaKeyBindingAction action,
MetaKeyHandlerFunc handler,
int handler_arg)
{
return add_keybinding_internal (display, name, schema,
return add_keybinding_internal (display, name, settings,
flags | META_KEY_BINDING_BUILTIN,
action, handler, handler_arg, NULL, NULL);
}
@ -591,7 +583,7 @@ add_builtin_keybinding (MetaDisplay *display,
* meta_display_add_keybinding:
* @display: a #MetaDisplay
* @name: the binding's name
* @schema: the #GSettings schema where @name is stored
* @settings: the #GSettings object where @name is stored
* @flags: flags to specify binding details
* @handler: function to run when the keybinding is invoked
* @user_data: the data to pass to @handler
@ -617,13 +609,13 @@ add_builtin_keybinding (MetaDisplay *display,
gboolean
meta_display_add_keybinding (MetaDisplay *display,
const char *name,
const char *schema,
GSettings *settings,
MetaKeyBindingFlags flags,
MetaKeyHandlerFunc handler,
gpointer user_data,
GDestroyNotify free_data)
{
return add_keybinding_internal (display, name, schema, flags,
return add_keybinding_internal (display, name, settings, flags,
META_KEYBINDING_ACTION_NONE,
handler, 0, user_data, free_data);
}
@ -2644,18 +2636,14 @@ handle_move_to_corner_backend (MetaDisplay *display,
MetaRectangle outer;
int orig_x, orig_y;
int new_x, new_y;
int frame_width, frame_height;
meta_window_get_work_area_all_monitors (window, &work_area);
meta_window_get_outer_rect (window, &outer);
meta_window_get_position (window, &orig_x, &orig_y);
frame_width = (window->frame ? window->frame->child_x : 0);
frame_height = (window->frame ? window->frame->child_y : 0);
if (xchange) {
new_x = work_area.x + (to_right ?
(work_area.width + frame_width) - outer.width :
work_area.width - outer.width :
0);
} else {
new_x = orig_x;
@ -2663,18 +2651,16 @@ handle_move_to_corner_backend (MetaDisplay *display,
if (ychange) {
new_y = work_area.y + (to_bottom ?
(work_area.height + frame_height) - outer.height :
work_area.height - outer.height :
0);
} else {
new_y = orig_y;
}
meta_window_move_resize (window,
FALSE,
new_x,
new_y,
window->rect.width,
window->rect.height);
meta_window_move_frame (window,
TRUE,
new_x,
new_y);
}
static void
@ -2978,17 +2964,6 @@ handle_panel (MetaDisplay *display,
meta_error_trap_pop (display);
}
static void
handle_toggle_recording (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,
XEvent *event,
MetaKeyBinding *binding,
gpointer dummy)
{
g_signal_emit_by_name (screen, "toggle-recording");
}
static void
handle_activate_window_menu (MetaDisplay *display,
MetaScreen *screen,
@ -3025,6 +3000,8 @@ tab_op_from_tab_type (MetaTabList type)
return META_GRAB_OP_KEYBOARD_TABBING_DOCK;
case META_TAB_LIST_GROUP:
return META_GRAB_OP_KEYBOARD_TABBING_GROUP;
case META_TAB_LIST_NORMAL_ALL:
break;
}
g_assert_not_reached ();
@ -3043,6 +3020,8 @@ cycle_op_from_tab_type (MetaTabList type)
return META_GRAB_OP_KEYBOARD_ESCAPING_DOCK;
case META_TAB_LIST_GROUP:
return META_GRAB_OP_KEYBOARD_ESCAPING_GROUP;
case META_TAB_LIST_NORMAL_ALL:
break;
}
g_assert_not_reached ();
@ -3447,7 +3426,7 @@ handle_move_to_workspace (MetaDisplay *display,
meta_topic (META_DEBUG_FOCUS,
"Resetting mouse_mode to FALSE due to "
"handle_move_to_workspace() call with flip set.\n");
workspace->screen->display->mouse_mode = FALSE;
meta_display_clear_mouse_mode (workspace->screen->display);
meta_workspace_activate_with_focus (workspace,
window,
event->xkey.time);
@ -3646,104 +3625,106 @@ init_builtin_key_bindings (MetaDisplay *display)
{
#define REVERSES_AND_REVERSED (META_KEY_BINDING_REVERSES | \
META_KEY_BINDING_IS_REVERSED)
GSettings *common_keybindings = g_settings_new (SCHEMA_COMMON_KEYBINDINGS);
GSettings *mutter_keybindings = g_settings_new (SCHEMA_MUTTER_KEYBINDINGS);
add_builtin_keybinding (display,
"switch-to-workspace-1",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_1,
handle_switch_to_workspace, 0);
add_builtin_keybinding (display,
"switch-to-workspace-2",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_2,
handle_switch_to_workspace, 1);
add_builtin_keybinding (display,
"switch-to-workspace-3",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_3,
handle_switch_to_workspace, 2);
add_builtin_keybinding (display,
"switch-to-workspace-4",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_4,
handle_switch_to_workspace, 3);
add_builtin_keybinding (display,
"switch-to-workspace-5",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_5,
handle_switch_to_workspace, 4);
add_builtin_keybinding (display,
"switch-to-workspace-6",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_6,
handle_switch_to_workspace, 5);
add_builtin_keybinding (display,
"switch-to-workspace-7",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_7,
handle_switch_to_workspace, 6);
add_builtin_keybinding (display,
"switch-to-workspace-8",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_8,
handle_switch_to_workspace, 7);
add_builtin_keybinding (display,
"switch-to-workspace-9",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_9,
handle_switch_to_workspace, 8);
add_builtin_keybinding (display,
"switch-to-workspace-10",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_10,
handle_switch_to_workspace, 9);
add_builtin_keybinding (display,
"switch-to-workspace-11",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_11,
handle_switch_to_workspace, 10);
add_builtin_keybinding (display,
"switch-to-workspace-12",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_12,
handle_switch_to_workspace, 11);
add_builtin_keybinding (display,
"switch-to-workspace-left",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_LEFT,
handle_switch_to_workspace, META_MOTION_LEFT);
add_builtin_keybinding (display,
"switch-to-workspace-right",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_RIGHT,
handle_switch_to_workspace, META_MOTION_RIGHT);
add_builtin_keybinding (display,
"switch-to-workspace-up",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_UP,
handle_switch_to_workspace, META_MOTION_UP);
add_builtin_keybinding (display,
"switch-to-workspace-down",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_WORKSPACE_DOWN,
handle_switch_to_workspace, META_MOTION_DOWN);
@ -3761,84 +3742,84 @@ init_builtin_key_bindings (MetaDisplay *display)
add_builtin_keybinding (display,
"switch-group",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_REVERSES,
META_KEYBINDING_ACTION_SWITCH_GROUP,
handle_switch, META_TAB_LIST_GROUP);
add_builtin_keybinding (display,
"switch-group-backward",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
REVERSES_AND_REVERSED,
META_KEYBINDING_ACTION_SWITCH_GROUP_BACKWARD,
handle_switch, META_TAB_LIST_GROUP);
add_builtin_keybinding (display,
"switch-windows",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_REVERSES,
META_KEYBINDING_ACTION_SWITCH_WINDOWS,
handle_switch, META_TAB_LIST_NORMAL);
add_builtin_keybinding (display,
"switch-windows-backward",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
REVERSES_AND_REVERSED,
META_KEYBINDING_ACTION_SWITCH_WINDOWS_BACKWARD,
handle_switch, META_TAB_LIST_NORMAL);
add_builtin_keybinding (display,
"switch-panels",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_REVERSES,
META_KEYBINDING_ACTION_SWITCH_PANELS,
handle_switch, META_TAB_LIST_DOCKS);
add_builtin_keybinding (display,
"switch-panels-backward",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
REVERSES_AND_REVERSED,
META_KEYBINDING_ACTION_SWITCH_PANELS_BACKWARD,
handle_switch, META_TAB_LIST_DOCKS);
add_builtin_keybinding (display,
"cycle-group",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_REVERSES,
META_KEYBINDING_ACTION_CYCLE_GROUP,
handle_cycle, META_TAB_LIST_GROUP);
add_builtin_keybinding (display,
"cycle-group-backward",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
REVERSES_AND_REVERSED,
META_KEYBINDING_ACTION_CYCLE_GROUP_BACKWARD,
handle_cycle, META_TAB_LIST_GROUP);
add_builtin_keybinding (display,
"cycle-windows",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_REVERSES,
META_KEYBINDING_ACTION_CYCLE_WINDOWS,
handle_cycle, META_TAB_LIST_NORMAL);
add_builtin_keybinding (display,
"cycle-windows-backward",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
REVERSES_AND_REVERSED,
META_KEYBINDING_ACTION_CYCLE_WINDOWS_BACKWARD,
handle_cycle, META_TAB_LIST_NORMAL);
add_builtin_keybinding (display,
"cycle-panels",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_REVERSES,
META_KEYBINDING_ACTION_CYCLE_PANELS,
handle_cycle, META_TAB_LIST_DOCKS);
add_builtin_keybinding (display,
"cycle-panels-backward",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
REVERSES_AND_REVERSED,
META_KEYBINDING_ACTION_CYCLE_PANELS_BACKWARD,
handle_cycle, META_TAB_LIST_DOCKS);
@ -3851,14 +3832,14 @@ init_builtin_key_bindings (MetaDisplay *display)
*/
add_builtin_keybinding (display,
"tab-popup-select",
SCHEMA_MUTTER_KEYBINDINGS,
mutter_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_TAB_POPUP_SELECT,
handle_tab_popup_select, 0);
add_builtin_keybinding (display,
"tab-popup-cancel",
SCHEMA_MUTTER_KEYBINDINGS,
mutter_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_TAB_POPUP_CANCEL,
handle_tab_popup_cancel, 0);
@ -3867,35 +3848,28 @@ init_builtin_key_bindings (MetaDisplay *display)
add_builtin_keybinding (display,
"show-desktop",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_SHOW_DESKTOP,
handle_show_desktop, 0);
add_builtin_keybinding (display,
"panel-main-menu",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_PANEL_MAIN_MENU,
handle_panel, META_KEYBINDING_ACTION_PANEL_MAIN_MENU);
add_builtin_keybinding (display,
"panel-run-dialog",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_PANEL_RUN_DIALOG,
handle_panel, META_KEYBINDING_ACTION_PANEL_RUN_DIALOG);
add_builtin_keybinding (display,
"toggle-recording",
SCHEMA_MUTTER_KEYBINDINGS,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_TOGGLE_RECORDING,
handle_toggle_recording, 0);
add_builtin_keybinding (display,
"set-spew-mark",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_NONE,
META_KEYBINDING_ACTION_SET_SPEW_MARK,
handle_set_spew_mark, 0);
@ -3910,311 +3884,314 @@ init_builtin_key_bindings (MetaDisplay *display)
add_builtin_keybinding (display,
"activate-window-menu",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_ACTIVATE_WINDOW_MENU,
handle_activate_window_menu, 0);
add_builtin_keybinding (display,
"toggle-fullscreen",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_TOGGLE_FULLSCREEN,
handle_toggle_fullscreen, 0);
add_builtin_keybinding (display,
"toggle-maximized",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_TOGGLE_MAXIMIZED,
handle_toggle_maximized, 0);
add_builtin_keybinding (display,
"toggle-tiled-left",
SCHEMA_MUTTER_KEYBINDINGS,
mutter_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_TOGGLE_TILED_LEFT,
handle_toggle_tiled, META_TILE_LEFT);
add_builtin_keybinding (display,
"toggle-tiled-right",
SCHEMA_MUTTER_KEYBINDINGS,
mutter_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_TOGGLE_TILED_RIGHT,
handle_toggle_tiled, META_TILE_RIGHT);
add_builtin_keybinding (display,
"toggle-above",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_TOGGLE_ABOVE,
handle_toggle_above, 0);
add_builtin_keybinding (display,
"maximize",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MAXIMIZE,
handle_maximize, 0);
add_builtin_keybinding (display,
"unmaximize",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_UNMAXIMIZE,
handle_unmaximize, 0);
add_builtin_keybinding (display,
"toggle-shaded",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_TOGGLE_SHADED,
handle_toggle_shaded, 0);
add_builtin_keybinding (display,
"minimize",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MINIMIZE,
handle_minimize, 0);
add_builtin_keybinding (display,
"close",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_CLOSE,
handle_close, 0);
add_builtin_keybinding (display,
"begin-move",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_BEGIN_MOVE,
handle_begin_move, 0);
add_builtin_keybinding (display,
"begin-resize",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_BEGIN_RESIZE,
handle_begin_resize, 0);
add_builtin_keybinding (display,
"toggle-on-all-workspaces",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_TOGGLE_ON_ALL_WORKSPACES,
handle_toggle_on_all_workspaces, 0);
add_builtin_keybinding (display,
"move-to-workspace-1",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_1,
handle_move_to_workspace, 0);
add_builtin_keybinding (display,
"move-to-workspace-2",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_2,
handle_move_to_workspace, 1);
add_builtin_keybinding (display,
"move-to-workspace-3",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_3,
handle_move_to_workspace, 2);
add_builtin_keybinding (display,
"move-to-workspace-4",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_4,
handle_move_to_workspace, 3);
add_builtin_keybinding (display,
"move-to-workspace-5",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_5,
handle_move_to_workspace, 4);
add_builtin_keybinding (display,
"move-to-workspace-6",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_6,
handle_move_to_workspace, 5);
add_builtin_keybinding (display,
"move-to-workspace-7",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_7,
handle_move_to_workspace, 6);
add_builtin_keybinding (display,
"move-to-workspace-8",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_8,
handle_move_to_workspace, 7);
add_builtin_keybinding (display,
"move-to-workspace-9",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_9,
handle_move_to_workspace, 8);
add_builtin_keybinding (display,
"move-to-workspace-10",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_10,
handle_move_to_workspace, 9);
add_builtin_keybinding (display,
"move-to-workspace-11",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_11,
handle_move_to_workspace, 10);
add_builtin_keybinding (display,
"move-to-workspace-12",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_12,
handle_move_to_workspace, 11);
add_builtin_keybinding (display,
"move-to-workspace-left",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_LEFT,
handle_move_to_workspace, META_MOTION_LEFT);
add_builtin_keybinding (display,
"move-to-workspace-right",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_RIGHT,
handle_move_to_workspace, META_MOTION_RIGHT);
add_builtin_keybinding (display,
"move-to-workspace-up",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_UP,
handle_move_to_workspace, META_MOTION_UP);
add_builtin_keybinding (display,
"move-to-workspace-down",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_DOWN,
handle_move_to_workspace, META_MOTION_DOWN);
add_builtin_keybinding (display,
"raise-or-lower",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_RAISE_OR_LOWER,
handle_raise_or_lower, 0);
add_builtin_keybinding (display,
"raise",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_RAISE,
handle_raise, 0);
add_builtin_keybinding (display,
"lower",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_LOWER,
handle_lower, 0);
add_builtin_keybinding (display,
"maximize-vertically",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MAXIMIZE_VERTICALLY,
handle_maximize_vertically, 0);
add_builtin_keybinding (display,
"maximize-horizontally",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MAXIMIZE_HORIZONTALLY,
handle_maximize_horizontally, 0);
add_builtin_keybinding (display,
"move-to-corner-nw",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_CORNER_NW,
handle_move_to_corner_nw, 0);
add_builtin_keybinding (display,
"move-to-corner-ne",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_CORNER_NE,
handle_move_to_corner_ne, 0);
add_builtin_keybinding (display,
"move-to-corner-sw",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_CORNER_SW,
handle_move_to_corner_sw, 0);
add_builtin_keybinding (display,
"move-to-corner-se",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_CORNER_SE,
handle_move_to_corner_se, 0);
add_builtin_keybinding (display,
"move-to-side-n",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_SIDE_N,
handle_move_to_side_n, 0);
add_builtin_keybinding (display,
"move-to-side-s",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_SIDE_S,
handle_move_to_side_s, 0);
add_builtin_keybinding (display,
"move-to-side-e",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_SIDE_E,
handle_move_to_side_e, 0);
add_builtin_keybinding (display,
"move-to-side-w",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_SIDE_W,
handle_move_to_side_w, 0);
add_builtin_keybinding (display,
"move-to-center",
SCHEMA_COMMON_KEYBINDINGS,
common_keybindings,
META_KEY_BINDING_PER_WINDOW,
META_KEYBINDING_ACTION_MOVE_TO_CENTER,
handle_move_to_center, 0);
g_object_unref (common_keybindings);
g_object_unref (mutter_keybindings);
}
void

View File

@ -23,18 +23,19 @@
*/
/**
* \file
* Program startup.
* SECTION:main
* @short_description: Program startup.
*
* Functions which parse the command-line arguments, create the display,
* kick everything off and then close down Mutter when it's time to go.
*/
/**
* \mainpage
*
*
*
* Mutter - a boring window manager for the adult in you
*
* Many window managers are like Marshmallow Froot Loops; Mutter
* is like Cheerios.
* is like Frosted Flakes: it's still plain old corn, but dusted
* with some sugar.
*
* The best way to get a handle on how the whole system fits together
* is discussed in doc/code-overview.txt; if you're looking for functions
@ -59,7 +60,7 @@
#include <stdlib.h>
#include <sys/types.h>
#include <wait.h>
#include <sys/wait.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
@ -77,12 +78,12 @@
#include <girepository.h>
#endif
/**
/*
* The exit code we'll return to our parent process when we eventually die.
*/
static MetaExitCode meta_exit_code = META_EXIT_SUCCESS;
/**
/*
* Handle on the main loop, so that we have an easy way of shutting Mutter
* down.
*/
@ -92,14 +93,15 @@ static void prefs_changed_callback (MetaPreference pref,
gpointer data);
/**
* log_handler:
* @log_domain: the domain the error occurred in (we ignore this)
* @log_level: the log level so that we can filter out less
* important messages
* @message: the message to log
* @user_data: arbitrary data (we ignore this)
*
* Prints log messages. If Mutter was compiled with backtrace support,
* also prints a backtrace (see meta_print_backtrace()).
*
* \param log_domain the domain the error occurred in (we ignore this)
* \param log_level the log level so that we can filter out less
* important messages
* \param message the message to log
* \param user_data arbitrary data (we ignore this)
*/
static void
log_handler (const gchar *log_domain,
@ -108,14 +110,15 @@ log_handler (const gchar *log_domain,
gpointer user_data)
{
meta_warning ("Log level %d: %s\n", log_level, message);
meta_print_backtrace ();
}
/**
* meta_print_compilation_info:
*
* Prints a list of which configure script options were used to
* build this copy of Mutter. This is actually always called
* on startup, but it's all no-op unless we're in verbose mode
* (see meta_set_verbose).
* (see meta_set_verbose()).
*/
static void
meta_print_compilation_info (void)
@ -125,21 +128,6 @@ meta_print_compilation_info (void)
#else
meta_verbose ("Compiled without shape extension\n");
#endif
#ifdef HAVE_XINERAMA
meta_topic (META_DEBUG_XINERAMA, "Compiled with Xinerama extension\n");
#else
meta_topic (META_DEBUG_XINERAMA, "Compiled without Xinerama extension\n");
#endif
#ifdef HAVE_XFREE_XINERAMA
meta_topic (META_DEBUG_XINERAMA, " (using XFree86 Xinerama)\n");
#else
meta_topic (META_DEBUG_XINERAMA, " (not using XFree86 Xinerama)\n");
#endif
#ifdef HAVE_SOLARIS_XINERAMA
meta_topic (META_DEBUG_XINERAMA, " (using Solaris Xinerama)\n");
#else
meta_topic (META_DEBUG_XINERAMA, " (not using Solaris Xinerama)\n");
#endif
#ifdef HAVE_XSYNC
meta_verbose ("Compiled with sync extension\n");
#else
@ -158,12 +146,14 @@ meta_print_compilation_info (void)
}
/**
* meta_print_self_identity:
*
* Prints the version number, the current timestamp (not the
* build date), the locale, the character encoding, and a list
* of configure script options that were used to build this
* copy of Mutter. This is actually always called
* on startup, but it's all no-op unless we're in verbose mode
* (see meta_set_verbose).
* (see meta_set_verbose()).
*/
static void
meta_print_self_identity (void)
@ -188,7 +178,7 @@ meta_print_self_identity (void)
meta_print_compilation_info ();
}
/**
/*
* The set of possible options that can be set on Mutter's
* command line.
*/
@ -207,7 +197,7 @@ static GOptionEntry meta_options[] = {
NULL
},
{
"replace", 0, 0, G_OPTION_ARG_NONE,
"replace", 'r', 0, G_OPTION_ARG_NONE,
&opt_replace_wm,
N_("Replace the running window manager"),
NULL
@ -327,10 +317,12 @@ meta_clutter_init (void)
}
/**
* meta_select_display:
*
* Selects which display Mutter should use. It first tries to use
* display_name as the display. If display_name is NULL then
* @display_name as the display. If @display_name is %NULL then
* try to use the environment variable MUTTER_DISPLAY. If that
* also is NULL, use the default - :0.0
* also is %NULL, use the default - :0.0
*/
static void
meta_select_display (gchar *display_name)
@ -381,7 +373,7 @@ on_sigterm (void)
* meta_init: (skip)
*
* Initialize mutter. Call this after meta_get_option_context() and
* meta_plugin_type_register(), and before meta_run().
* meta_plugin_manager_set_plugin_type(), and before meta_run().
*/
void
meta_init (void)
@ -389,8 +381,6 @@ meta_init (void)
struct sigaction act;
sigset_t empty_mask;
GIOChannel *channel;
g_type_init ();
sigemptyset (&empty_mask);
act.sa_handler = SIG_IGN;
@ -560,13 +550,14 @@ meta_run (void)
}
/**
* meta_quit:
* @code: The success or failure code to return to the calling process.
*
* Stops Mutter. This tells the event loop to stop processing; it is
* rather dangerous to use this because this will leave the user with
* no window manager. We generally do this only if, for example, the
* session manager asks us to; we assume the session manager knows
* what it's talking about.
*
* \param code The success or failure code to return to the calling process.
*/
void
meta_quit (MetaExitCode code)
@ -579,13 +570,14 @@ meta_quit (MetaExitCode code)
}
/**
* prefs_changed_callback:
* @pref Which preference has changed
* @data Arbitrary data (which we ignore)
*
* Called on pref changes. (One of several functions of its kind and purpose.)
*
* \bug Why are these particular prefs handled in main.c and not others?
* Should they be?
*
* \param pref Which preference has changed
* \param data Arbitrary data (which we ignore)
* FIXME: Why are these particular prefs handled in main.c and not others?
* Should they be?
*/
static void
prefs_changed_callback (MetaPreference pref,

View File

@ -45,7 +45,7 @@ print_version (const gchar *option_name,
exit (0);
}
static gchar *mutter_plugins;
static gchar *plugin = "default";
GOptionEntry mutter_options[] = {
{
@ -55,10 +55,10 @@ GOptionEntry mutter_options[] = {
NULL
},
{
"mutter-plugins", 0, 0, G_OPTION_ARG_STRING,
&mutter_plugins,
N_("Comma-separated list of compositor plugins"),
"PLUGINS"
"mutter-plugin", 0, 0, G_OPTION_ARG_STRING,
&plugin,
N_("Mutter plugin to use"),
"PLUGIN",
},
{ NULL }
};
@ -69,6 +69,8 @@ main (int argc, char **argv)
GOptionContext *ctx;
GError *error = NULL;
g_type_init ();
ctx = meta_get_option_context ();
g_option_context_add_main_entries (ctx, mutter_options, GETTEXT_PACKAGE);
if (!g_option_context_parse (ctx, &argc, &argv, &error))
@ -77,20 +79,8 @@ main (int argc, char **argv)
exit (1);
}
if (mutter_plugins)
{
MetaPluginManager *mgr;
char **plugins = g_strsplit (mutter_plugins, ",", -1);
char **plugin;
mgr = meta_plugin_manager_get_default ();
for (plugin = plugins; *plugin; plugin++)
{
g_strstrip (*plugin);
meta_plugin_manager_load (mgr, *plugin);
}
g_strfreev (plugins);
}
if (plugin)
meta_plugin_manager_load (plugin);
meta_init ();
return meta_run ();

View File

@ -105,7 +105,7 @@ find_next_cascade (MetaWindow *window,
int window_width, window_height;
int cascade_stage;
MetaRectangle work_area;
const MetaMonitorInfo* current;
int current;
sorted = g_list_copy (windows);
sorted = g_list_sort (sorted, northwestcmp);
@ -137,7 +137,7 @@ find_next_cascade (MetaWindow *window,
*/
current = meta_screen_get_current_monitor (window->screen);
meta_window_get_work_area_for_monitor (window, current->number, &work_area);
meta_window_get_work_area_for_monitor (window, current, &work_area);
cascade_x = MAX (0, work_area.x);
cascade_y = MAX (0, work_area.y);
@ -815,7 +815,7 @@ meta_window_place (MetaWindow *window,
int w, h;
/* Warning, this function is a round trip! */
xi = meta_screen_get_current_monitor (window->screen);
xi = meta_screen_get_current_monitor_info (window->screen);
w = xi->rect.width;
h = xi->rect.height;
@ -860,7 +860,7 @@ meta_window_place (MetaWindow *window,
}
/* Warning, this is a round trip! */
xi = meta_screen_get_current_monitor (window->screen);
xi = meta_screen_get_current_monitor_info (window->screen);
/* "Origin" placement algorithm */
x = xi->rect.x;

View File

@ -53,7 +53,6 @@
#define KEY_GNOME_CURSOR_SIZE "cursor-size"
#define KEY_OVERLAY_KEY "overlay-key"
#define KEY_LIVE_HIDDEN_WINDOWS "live-hidden-windows"
#define KEY_WORKSPACES_ONLY_ON_PRIMARY "workspaces-only-on-primary"
#define KEY_NO_TAB_POPUP "no-tab-popup"
@ -82,6 +81,7 @@ static int num_workspaces = 4;
static GDesktopTitlebarAction action_double_click_titlebar = G_DESKTOP_TITLEBAR_ACTION_TOGGLE_MAXIMIZE;
static GDesktopTitlebarAction action_middle_click_titlebar = G_DESKTOP_TITLEBAR_ACTION_LOWER;
static GDesktopTitlebarAction action_right_click_titlebar = G_DESKTOP_TITLEBAR_ACTION_MENU;
static gboolean dynamic_workspaces = FALSE;
static gboolean application_based = FALSE;
static gboolean disable_workarounds = FALSE;
static gboolean auto_raise = FALSE;
@ -96,6 +96,7 @@ static int draggable_border_width = 10;
static gboolean resize_with_right_button = FALSE;
static gboolean edge_tiling = FALSE;
static gboolean force_fullscreen = TRUE;
static gboolean ignore_request_hide_titlebar = FALSE;
static GDesktopVisualBellType visual_bell_type = G_DESKTOP_VISUAL_BELL_FULLSCREEN_FLASH;
static MetaButtonLayout button_layout;
@ -103,7 +104,6 @@ static MetaButtonLayout button_layout;
/* NULL-terminated array */
static char **workspace_names = NULL;
static gboolean live_hidden_windows = FALSE;
static gboolean workspaces_only_on_primary = FALSE;
static gboolean no_tab_popup = FALSE;
@ -164,36 +164,30 @@ typedef struct
gboolean *target;
} MetaBoolPreference;
/**
* MetaStringPreference:
* @handler: (allow-none): A handler. Many of the string preferences
* aren't stored as strings and need parsing; others of them have
* default values which can't be solved in the general case. If you
* include a function pointer here, it will be called instead of writing
* the string value out to the target variable.
* The function will be passed to g_settings_get_mapped() and should
* return %TRUE if the mapping was successful and %FALSE otherwise.
* In the former case the function is expected to handle the result
* of the conversion itself and call queue_changed() appropriately;
* in particular the @result (out) parameter as returned by
* g_settings_get_mapped() will be ignored in all cases.
* This may be %NULL. If it is, see "target", below.
* @target: (allow-none): Where to write the incoming string.
* This must be %NULL if the handler is non-%NULL.
* If the incoming string is %NULL, no change will be made.
*/
typedef struct
{
MetaBasePreference base;
/**
* A handler. Many of the string preferences aren't stored as
* strings and need parsing; others of them have default values
* which can't be solved in the general case. If you include a
* function pointer here, it will be called instead of writing
* the string value out to the target variable.
*
* The function will be passed to g_settings_get_mapped() and should
* return %TRUE if the mapping was successful and %FALSE otherwise.
* In the former case the function is expected to handle the result
* of the conversion itself and call queue_changed() appropriately;
* in particular the @result (out) parameter as returned by
* g_settings_get_mapped() will be ignored in all cases.
*
* This may be NULL. If it is, see "target", below.
*/
GSettingsGetMapping handler;
/**
* Where to write the incoming string.
*
* This must be NULL if the handler is non-NULL.
* If the incoming string is NULL, no change will be made.
*/
gchar **target;
} MetaStringPreference;
typedef struct
@ -280,6 +274,13 @@ static MetaBoolPreference preferences_bool[] =
},
&use_system_font,
},
{
{ "dynamic-workspaces",
SCHEMA_MUTTER,
META_PREF_DYNAMIC_WORKSPACES,
},
&dynamic_workspaces,
},
{
{ "application-based",
SCHEMA_GENERAL,
@ -343,13 +344,6 @@ static MetaBoolPreference preferences_bool[] =
},
&edge_tiling,
},
{
{ KEY_LIVE_HIDDEN_WINDOWS,
SCHEMA_MUTTER,
META_PREF_LIVE_HIDDEN_WINDOWS,
},
&live_hidden_windows,
},
{
{ "workspaces-only-on-primary",
SCHEMA_MUTTER,
@ -923,9 +917,9 @@ do_override (char *key,
/**
* meta_prefs_override_preference_schema
* meta_prefs_override_preference_schema:
* @key: the preference name
* @schema: new schema for preference %key
* @schema: new schema for preference @key
*
* Specify a schema whose keys are used to override the standard Metacity
* keys. This might be used if a plugin expected a different value for
@ -1054,6 +1048,8 @@ bindings_changed (GSettings *settings,
}
/**
* maybe_give_disable_workaround_warning:
*
* Special case: give a warning the first time disable_workarounds
* is turned on.
*/
@ -1498,6 +1494,12 @@ meta_prefs_get_num_workspaces (void)
return num_workspaces;
}
gboolean
meta_prefs_get_dynamic_workspaces (void)
{
return dynamic_workspaces;
}
gboolean
meta_prefs_get_application_based (void)
{
@ -1603,9 +1605,6 @@ meta_preference_to_string (MetaPreference pref)
case META_PREF_FORCE_FULLSCREEN:
return "FORCE_FULLSCREEN";
case META_PREF_LIVE_HIDDEN_WINDOWS:
return "LIVE_HIDDEN_WINDOWS";
case META_PREF_WORKSPACES_ONLY_ON_PRIMARY:
return "WORKSPACES_ONLY_ON_PRIMARY";
@ -1614,6 +1613,9 @@ meta_preference_to_string (MetaPreference pref)
case META_PREF_DRAGGABLE_BORDER_WIDTH:
return "DRAGGABLE_BORDER_WIDTH";
case META_PREF_DYNAMIC_WORKSPACES:
return "DYNAMIC_WORKSPACES";
}
return "(unknown)";
@ -1643,7 +1645,7 @@ meta_key_pref_free (MetaKeyPref *pref)
update_binding (pref, NULL);
g_free (pref->name);
g_free (pref->schema);
g_object_unref (pref->settings);
g_free (pref);
}
@ -1903,13 +1905,13 @@ meta_prefs_get_visual_bell_type (void)
gboolean
meta_prefs_add_keybinding (const char *name,
const char *schema,
GSettings *settings,
MetaKeyBindingAction action,
MetaKeyBindingFlags flags)
{
MetaKeyPref *pref;
GSettings *settings;
char **strokes;
guint id;
if (g_hash_table_lookup (key_bindings, name))
{
@ -1917,19 +1919,9 @@ meta_prefs_add_keybinding (const char *name,
return FALSE;
}
settings = SETTINGS (schema);
if (settings == NULL)
{
settings = g_settings_new (schema);
if ((flags & META_KEY_BINDING_BUILTIN) != 0)
g_signal_connect (settings, "changed",
G_CALLBACK (bindings_changed), NULL);
g_hash_table_insert (settings_schemas, g_strdup (schema), settings);
}
pref = g_new0 (MetaKeyPref, 1);
pref->name = g_strdup (name);
pref->schema = g_strdup (schema);
pref->settings = g_object_ref (settings);
pref->action = action;
pref->bindings = NULL;
pref->add_shift = (flags & META_KEY_BINDING_REVERSES) != 0;
@ -1942,9 +1934,17 @@ meta_prefs_add_keybinding (const char *name,
g_hash_table_insert (key_bindings, g_strdup (name), pref);
if (!pref->builtin)
if (pref->builtin)
{
if (g_object_get_data (G_OBJECT (settings), "changed-signal") == NULL)
{
id = g_signal_connect (settings, "changed",
G_CALLBACK (bindings_changed), NULL);
g_object_set_data (G_OBJECT (settings), "changed-signal", GUINT_TO_POINTER (id));
}
}
else
{
guint id;
char *changed_signal = g_strdup_printf ("changed::%s", name);
id = g_signal_connect (settings, changed_signal,
G_CALLBACK (bindings_changed), NULL);
@ -1962,7 +1962,6 @@ gboolean
meta_prefs_remove_keybinding (const char *name)
{
MetaKeyPref *pref;
GSettings *settings;
guint id;
pref = g_hash_table_lookup (key_bindings, name);
@ -1978,9 +1977,8 @@ meta_prefs_remove_keybinding (const char *name)
return FALSE;
}
settings = SETTINGS (pref->schema);
id = GPOINTER_TO_UINT (g_object_steal_data (G_OBJECT (settings), name));
g_signal_handler_disconnect (settings, id);
id = GPOINTER_TO_UINT (g_object_steal_data (G_OBJECT (pref->settings), name));
g_signal_handler_disconnect (pref->settings, id);
g_hash_table_remove (key_bindings, name);
@ -1991,7 +1989,8 @@ meta_prefs_remove_keybinding (const char *name)
/**
* meta_prefs_get_keybindings:
* Return: (element-type MetaKeyPref) (transfer container):
*
* Returns: (element-type MetaKeyPref) (transfer container):
*/
GList *
meta_prefs_get_keybindings ()
@ -2117,27 +2116,6 @@ meta_prefs_get_force_fullscreen (void)
return force_fullscreen;
}
gboolean
meta_prefs_get_live_hidden_windows (void)
{
#if 0
return live_hidden_windows;
#else
return TRUE;
#endif
}
void
meta_prefs_set_live_hidden_windows (gboolean whether)
{
MetaBasePreference *pref;
find_pref (preferences_bool, sizeof(MetaBoolPreference),
KEY_LIVE_HIDDEN_WINDOWS, &pref);
g_settings_set_boolean (SETTINGS (pref->schema), KEY_LIVE_HIDDEN_WINDOWS,
whether);
}
gboolean
meta_prefs_get_workspaces_only_on_primary (void)
{
@ -2172,3 +2150,15 @@ meta_prefs_set_force_fullscreen (gboolean whether)
{
force_fullscreen = whether;
}
gboolean
meta_prefs_get_ignore_request_hide_titlebar (void)
{
return ignore_request_hide_titlebar;
}
void
meta_prefs_set_ignore_request_hide_titlebar (gboolean whether)
{
ignore_request_hide_titlebar = whether;
}

View File

@ -156,8 +156,6 @@ void meta_screen_manage_all_windows (MetaScreen *scree
void meta_screen_foreach_window (MetaScreen *screen,
MetaScreenWindowFunc func,
gpointer data);
void meta_screen_queue_frame_redraws (MetaScreen *screen);
void meta_screen_queue_window_resizes (MetaScreen *screen);
void meta_screen_set_cursor (MetaScreen *screen,
MetaCursor cursor);
@ -186,7 +184,7 @@ void meta_screen_tile_preview_hide (MetaScreen *screen);
MetaWindow* meta_screen_get_mouse_window (MetaScreen *screen,
MetaWindow *not_this_one);
const MetaMonitorInfo* meta_screen_get_current_monitor (MetaScreen *screen);
const MetaMonitorInfo* meta_screen_get_current_monitor_info (MetaScreen *screen);
const MetaMonitorInfo* meta_screen_get_monitor_for_rect (MetaScreen *screen,
MetaRectangle *rect);
const MetaMonitorInfo* meta_screen_get_monitor_for_window (MetaScreen *screen,

View File

@ -41,12 +41,8 @@
#include <meta/compositor.h>
#include "mutter-enum-types.h"
#ifdef HAVE_SOLARIS_XINERAMA
#include <X11/extensions/xinerama.h>
#endif
#ifdef HAVE_XFREE_XINERAMA
#include <X11/extensions/Xinerama.h>
#endif
#ifdef HAVE_RANDR
#include <X11/extensions/Xrandr.h>
#endif
@ -83,7 +79,6 @@ enum
enum
{
RESTACKED,
TOGGLE_RECORDING,
WORKSPACE_ADDED,
WORKSPACE_REMOVED,
WORKSPACE_SWITCHED,
@ -200,7 +195,7 @@ meta_screen_class_init (MetaScreenClass *klass)
3,
G_TYPE_INT,
G_TYPE_INT,
MUTTER_TYPE_MOTION_DIRECTION);
META_TYPE_MOTION_DIRECTION);
screen_signals[WINDOW_ENTERED_MONITOR] =
g_signal_new ("window-entered-monitor",
@ -230,14 +225,6 @@ meta_screen_class_init (MetaScreenClass *klass)
NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_POINTER);
screen_signals[TOGGLE_RECORDING] =
g_signal_new ("toggle-recording",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 0);
screen_signals[WORKAREAS_CHANGED] =
g_signal_new ("workareas-changed",
G_TYPE_FROM_CLASS (object_class),
@ -487,7 +474,6 @@ reload_monitor_infos (MetaScreen *screen)
screen->monitor_infos[1].rect.width = screen->rect.width / 2;
}
#ifdef HAVE_XFREE_XINERAMA
if (screen->n_monitor_infos == 0 &&
XineramaIsActive (display->xdisplay))
{
@ -557,74 +543,10 @@ reload_monitor_infos (MetaScreen *screen)
else if (screen->n_monitor_infos > 0)
{
meta_topic (META_DEBUG_XINERAMA,
"No XFree86 Xinerama extension or XFree86 Xinerama inactive on display %s\n",
"No Xinerama extension or Xinerama inactive on display %s\n",
display->name);
}
#else
meta_topic (META_DEBUG_XINERAMA,
"Mutter compiled without XFree86 Xinerama support\n");
#endif /* HAVE_XFREE_XINERAMA */
#ifdef HAVE_SOLARIS_XINERAMA
/* This code from GDK, Copyright (C) 2002 Sun Microsystems */
if (screen->n_monitor_infos == 0 &&
XineramaGetState (screen->display->xdisplay,
screen->number))
{
XRectangle monitors[MAXFRAMEBUFFERS];
unsigned char hints[16];
int result;
int n_monitors;
int i;
n_monitors = 0;
result = XineramaGetInfo (screen->display->xdisplay,
screen->number,
monitors, hints,
&n_monitors);
/* Yes I know it should be Success but the current implementation
* returns the num of monitor
*/
if (result > 0)
{
g_assert (n_monitors > 0);
screen->monitor_infos = g_new0 (MetaMonitorInfo, n_monitors);
screen->n_monitor_infos = n_monitors;
i = 0;
while (i < n_monitors)
{
screen->monitor_infos[i].number = i;
screen->monitor_infos[i].rect.x = monitors[i].x;
screen->monitor_infos[i].rect.y = monitors[i].y;
screen->monitor_infos[i].rect.width = monitors[i].width;
screen->monitor_infos[i].rect.height = monitors[i].height;
meta_topic (META_DEBUG_XINERAMA,
"Monitor %d is %d,%d %d x %d\n",
screen->monitor_infos[i].number,
screen->monitor_infos[i].rect.x,
screen->monitor_infos[i].rect.y,
screen->monitor_infos[i].rect.width,
screen->monitor_infos[i].rect.height);
++i;
}
}
}
else if (screen->n_monitor_infos == 0)
{
meta_topic (META_DEBUG_XINERAMA,
"No Solaris Xinerama extension or Solaris Xinerama inactive on display %s\n",
display->name);
}
#else
meta_topic (META_DEBUG_XINERAMA,
"Mutter compiled without Solaris Xinerama support\n");
#endif /* HAVE_SOLARIS_XINERAMA */
/* If no Xinerama, fill in the single screen info so
* we can use the field unconditionally
*/
@ -1173,7 +1095,9 @@ prefs_changed_callback (MetaPreference pref,
{
MetaScreen *screen = data;
if (pref == META_PREF_NUM_WORKSPACES)
if ((pref == META_PREF_NUM_WORKSPACES ||
pref == META_PREF_DYNAMIC_WORKSPACES) &&
!meta_prefs_get_dynamic_workspaces ())
{
/* GSettings doesn't provide timestamps, but luckily update_num_workspaces
* often doesn't need it...
@ -1292,31 +1216,6 @@ meta_screen_foreach_window (MetaScreen *screen,
g_slist_free (winlist);
}
static void
queue_draw (MetaScreen *screen, MetaWindow *window, gpointer data)
{
if (window->frame)
meta_frame_queue_draw (window->frame);
}
void
meta_screen_queue_frame_redraws (MetaScreen *screen)
{
meta_screen_foreach_window (screen, queue_draw, NULL);
}
static void
queue_resize (MetaScreen *screen, MetaWindow *window, gpointer data)
{
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
}
void
meta_screen_queue_window_resizes (MetaScreen *screen)
{
meta_screen_foreach_window (screen, queue_resize, NULL);
}
int
meta_screen_get_n_workspaces (MetaScreen *screen)
{
@ -1483,12 +1382,14 @@ meta_screen_remove_workspace (MetaScreen *screen, MetaWorkspace *workspace,
new_num = g_list_length (screen->workspaces);
set_number_of_spaces_hint (screen, new_num);
meta_prefs_set_num_workspaces (new_num);
if (!meta_prefs_get_dynamic_workspaces ())
meta_prefs_set_num_workspaces (new_num);
/* If deleting a workspace before the current workspace, the active
* workspace index changes, so we need to update that hint */
if (active_index_changed)
meta_screen_set_active_workspace_hint (workspace->screen);
meta_screen_set_active_workspace_hint (screen);
l = next;
while (l)
@ -1538,7 +1439,9 @@ meta_screen_append_new_workspace (MetaScreen *screen, gboolean activate,
new_num = g_list_length (screen->workspaces);
set_number_of_spaces_hint (screen, new_num);
meta_prefs_set_num_workspaces (new_num);
if (!meta_prefs_get_dynamic_workspaces ())
meta_prefs_set_num_workspaces (new_num);
meta_screen_queue_workarea_recalc (screen);
@ -1925,7 +1828,6 @@ meta_screen_tile_preview_update_timeout (gpointer data)
{
MetaScreen *screen = data;
MetaWindow *window = screen->display->grab_window;
gboolean composited = screen->display->compositor != NULL;
gboolean needs_preview = FALSE;
screen->tile_preview_timeout_id = 0;
@ -1935,8 +1837,7 @@ meta_screen_tile_preview_update_timeout (gpointer data)
Window xwindow;
gulong create_serial;
screen->tile_preview = meta_tile_preview_new (screen->number,
composited);
screen->tile_preview = meta_tile_preview_new (screen->number);
xwindow = meta_tile_preview_get_xwindow (screen->tile_preview,
&create_serial);
meta_stack_tracker_record_add (screen->stack_tracker,
@ -2153,7 +2054,7 @@ meta_screen_get_natural_monitor_list (MetaScreen *screen,
visited[i] = FALSE;
}
current = meta_screen_get_current_monitor (screen);
current = meta_screen_get_current_monitor_info (screen);
monitor_queue = g_queue_new ();
g_queue_push_tail (monitor_queue, (gpointer) current);
visited[current->number] = TRUE;
@ -2220,10 +2121,26 @@ meta_screen_get_natural_monitor_list (MetaScreen *screen,
}
const MetaMonitorInfo*
meta_screen_get_current_monitor_info (MetaScreen *screen)
{
int monitor_index;
monitor_index = meta_screen_get_current_monitor (screen);
return &screen->monitor_infos[monitor_index];
}
/**
* meta_screen_get_current_monitor:
* @screen: a #MetaScreen
*
* Gets the index of the monitor that currently has the mouse pointer.
*
* Return value: a monitor index
*/
int
meta_screen_get_current_monitor (MetaScreen *screen)
{
if (screen->n_monitor_infos == 1)
return &screen->monitor_infos[0];
return 0;
/* Sadly, we have to do it this way. Yuck.
*/
@ -2265,7 +2182,7 @@ meta_screen_get_current_monitor (MetaScreen *screen)
screen->last_monitor_index);
}
return &screen->monitor_infos[screen->last_monitor_index];
return screen->last_monitor_index;
}
/**
@ -2982,7 +2899,7 @@ meta_screen_resize (MetaScreen *screen,
g_free (old_monitor_infos);
g_slist_free (windows);
g_signal_emit (screen, screen_signals[MONITORS_CHANGED], 0, index);
g_signal_emit (screen, screen_signals[MONITORS_CHANGED], 0);
}
void
@ -3459,9 +3376,10 @@ meta_screen_get_screen_number (MetaScreen *screen)
/**
* meta_screen_get_display:
* Retrieve the display associated with screen.
* @screen: A #MetaScreen
*
* Retrieve the display associated with screen.
*
* Returns: (transfer none): Display
*/
MetaDisplay *

View File

@ -394,6 +394,8 @@ meta_stack_tracker_free (MetaStackTracker *tracker)
g_queue_foreach (tracker->queued_requests, (GFunc)meta_stack_op_free, NULL);
g_queue_free (tracker->queued_requests);
tracker->queued_requests = NULL;
g_free (tracker);
}
static void

View File

@ -1,7 +1,8 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/**
* \file stack.c Which windows cover which other windows
* SECTION:stack
* @short_description: Which windows cover which other windows
*/
/*
@ -121,6 +122,7 @@ meta_stack_add (MetaStack *stack,
window->desc, window->stack_position);
stack_sync_to_server (stack);
meta_stack_update_window_tile_matches (stack, window->screen->active_workspace);
}
void
@ -156,6 +158,7 @@ meta_stack_remove (MetaStack *stack,
GUINT_TO_POINTER (window->frame->xwindow));
stack_sync_to_server (stack);
meta_stack_update_window_tile_matches (stack, window->screen->active_workspace);
}
void
@ -165,6 +168,7 @@ meta_stack_update_layer (MetaStack *stack,
stack->need_relayer = TRUE;
stack_sync_to_server (stack);
meta_stack_update_window_tile_matches (stack, window->screen->active_workspace);
}
void
@ -174,26 +178,64 @@ meta_stack_update_transient (MetaStack *stack,
stack->need_constrain = TRUE;
stack_sync_to_server (stack);
meta_stack_update_window_tile_matches (stack, window->screen->active_workspace);
}
/* raise/lower within a layer */
void
meta_stack_raise (MetaStack *stack,
MetaWindow *window)
{
meta_window_set_stack_position_no_sync (window,
stack->n_positions - 1);
{
GList *l;
int max_stack_position = window->stack_position;
MetaWorkspace *workspace;
stack_ensure_sorted (stack);
workspace = meta_window_get_workspace (window);
for (l = stack->sorted; l; l = l->next)
{
MetaWindow *w = (MetaWindow *) l->data;
if (meta_window_located_on_workspace (w, workspace) &&
w->stack_position > max_stack_position)
max_stack_position = w->stack_position;
}
if (max_stack_position == window->stack_position)
return;
meta_window_set_stack_position_no_sync (window, max_stack_position);
stack_sync_to_server (stack);
meta_stack_update_window_tile_matches (stack, window->screen->active_workspace);
}
void
meta_stack_lower (MetaStack *stack,
MetaWindow *window)
{
meta_window_set_stack_position_no_sync (window, 0);
GList *l;
int min_stack_position = window->stack_position;
MetaWorkspace *workspace;
stack_ensure_sorted (stack);
workspace = meta_window_get_workspace (window);
for (l = stack->sorted; l; l = l->next)
{
MetaWindow *w = (MetaWindow *) l->data;
if (meta_window_located_on_workspace (w, workspace) &&
w->stack_position < min_stack_position)
min_stack_position = w->stack_position;
}
if (min_stack_position == window->stack_position)
return;
meta_window_set_stack_position_no_sync (window, min_stack_position);
stack_sync_to_server (stack);
meta_stack_update_window_tile_matches (stack, window->screen->active_workspace);
}
void
@ -209,6 +251,27 @@ meta_stack_thaw (MetaStack *stack)
stack->freeze_count -= 1;
stack_sync_to_server (stack);
meta_stack_update_window_tile_matches (stack, NULL);
}
void
meta_stack_update_window_tile_matches (MetaStack *stack,
MetaWorkspace *workspace)
{
GList *windows, *tmp;
if (stack->freeze_count > 0)
return;
windows = meta_stack_list_windows (stack, workspace);
tmp = windows;
while (tmp)
{
meta_window_compute_tile_match ((MetaWindow *) tmp->data);
tmp = tmp->next;
}
g_list_free (windows);
}
static gboolean
@ -278,7 +341,7 @@ get_standalone_layer (MetaWindow *window)
windows_on_different_monitor (window,
window->display->expected_focus_window))))
layer = META_LAYER_FULLSCREEN;
else if (window->wm_state_above)
else if (window->wm_state_above && !META_WINDOW_MAXIMIZED (window))
layer = META_LAYER_TOP;
else
layer = META_LAYER_NORMAL;
@ -737,6 +800,8 @@ apply_constraints (Constraint **constraints,
}
/**
* stack_do_window_deletions:
*
* Go through "deleted" and take the matching windows
* out of "windows".
*/
@ -837,6 +902,8 @@ stack_do_window_additions (MetaStack *stack)
}
/**
* stack_do_relayer:
*
* Update the layers that windows are in
*/
static void
@ -882,6 +949,8 @@ stack_do_relayer (MetaStack *stack)
}
/**
* stack_do_constrain:
*
* Update stack_position and layer to reflect transiency
* constraints
*/
@ -914,6 +983,8 @@ stack_do_constrain (MetaStack *stack)
}
/**
* stack_do_resort:
*
* Sort stack->sorted with layers having priority over stack_position.
*/
static void
@ -932,6 +1003,8 @@ stack_do_resort (MetaStack *stack)
}
/**
* stack_ensure_sorted:
*
* Puts the stack into canonical form.
*
* Honour the removed and added lists of the stack, and then recalculate
@ -951,6 +1024,8 @@ stack_ensure_sorted (MetaStack *stack)
}
/**
* raise_window_relative_to_managed_windows:
*
* This function is used to avoid raising a window above popup
* menus and other such things.
*
@ -1051,6 +1126,8 @@ raise_window_relative_to_managed_windows (MetaScreen *screen,
}
/**
* stack_sync_to_server:
*
* Order the windows on the X server to be the same as in our structure.
* We do this using XRestackWindows if we don't know the previous order,
* or XConfigureWindow on a few particular windows if we do and can figure
@ -1656,6 +1733,7 @@ meta_stack_set_positions (MetaStack *stack,
"Reset the stack positions of (nearly) all windows\n");
stack_sync_to_server (stack);
meta_stack_update_window_tile_matches (stack, NULL);
}
void
@ -1718,4 +1796,6 @@ meta_window_set_stack_position (MetaWindow *window,
{
meta_window_set_stack_position_no_sync (window, position);
stack_sync_to_server (window->screen->stack);
meta_stack_update_window_tile_matches (window->screen->stack,
window->screen->active_workspace);
}

View File

@ -1,23 +1,5 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/**
* \file stack.h Which windows cover which other windows
*
* There are two factors that determine window position.
*
* One is window->stack_position, which is a unique integer
* indicating how windows are ordered with respect to one
* another. The ordering here transcends layers; it isn't changed
* as the window is moved among layers. This allows us to move several
* windows from one layer to another, while preserving the relative
* order of the moved windows. Also, it allows us to restore
* the stacking order from a saved session.
*
* However when actually stacking windows on the screen, the
* layer overrides the stack_position; windows are first sorted
* by layer, then by stack_position within each layer.
*/
/*
* Copyright (C) 2001 Havoc Pennington
* Copyright (C) 2005 Elijah Newren
@ -41,6 +23,25 @@
#ifndef META_STACK_H
#define META_STACK_H
/**
* SECTION:stack
* @short_description: Which windows cover which other windows
*
* There are two factors that determine window position.
*
* One is window->stack_position, which is a unique integer
* indicating how windows are ordered with respect to one
* another. The ordering here transcends layers; it isn't changed
* as the window is moved among layers. This allows us to move several
* windows from one layer to another, while preserving the relative
* order of the moved windows. Also, it allows us to restore
* the stacking order from a saved session.
*
* However when actually stacking windows on the screen, the
* layer overrides the stack_position; windows are first sorted
* by layer, then by stack_position within each layer.
*/
#include "screen-private.h"
/**
@ -123,192 +124,214 @@ struct _MetaStack
};
/**
* meta_stack_new:
* @screen: The MetaScreen which will be the parent of this stack.
*
* Creates and initialises a MetaStack.
*
* \param screen The MetaScreen which will be the parent of this stack.
* \return The new screen.
* Returns: The new screen.
*/
MetaStack *meta_stack_new (MetaScreen *screen);
/**
* Destroys and frees a MetaStack.
* meta_stack_free:
* @stack: The stack to destroy.
*
* \param stack The stack to destroy.
* Destroys and frees a MetaStack.
*/
void meta_stack_free (MetaStack *stack);
/**
* meta_stack_add:
* @stack: The stack to add it to
* @window: The window to add
*
* Adds a window to the local stack. It is a fatal error to call this
* function on a window which already exists on the stack of any screen.
*
* \param window The window to add
* \param stack The stack to add it to
*/
void meta_stack_add (MetaStack *stack,
MetaWindow *window);
/**
* meta_stack_remove:
* @stack: The stack to remove it from
* @window: The window to remove
*
* Removes a window from the local stack. It is a fatal error to call this
* function on a window which exists on the stack of any screen.
*
* \param window The window to remove
* \param stack The stack to remove it from
*/
void meta_stack_remove (MetaStack *stack,
MetaWindow *window);
/**
* meta_stack_update_layer:
* @stack: The stack to recalculate
* @window: Dummy parameter
*
* Recalculates the correct layer for all windows in the stack,
* and moves them about accordingly.
*
* \param window Dummy parameter
* \param stack The stack to recalculate
* \bug What's with the dummy parameter?
*/
void meta_stack_update_layer (MetaStack *stack,
MetaWindow *window);
/**
* meta_stack_update_transient:
* @stack: The stack to recalculate
* @window: Dummy parameter
*
* Recalculates the correct stacking order for all windows in the stack
* according to their transience, and moves them about accordingly.
*
* \param window Dummy parameter
* \param stack The stack to recalculate
* \bug What's with the dummy parameter?
* FIXME: What's with the dummy parameter?
*/
void meta_stack_update_transient (MetaStack *stack,
MetaWindow *window);
/**
* Move a window to the top of its layer.
* meta_stack_raise:
* @stack: The stack to modify.
* @window: The window that's making an ascension.
* (Amulet of Yendor not required.)
*
* \param stack The stack to modify.
* \param window The window that's making an ascension.
* (Amulet of Yendor not required.)
* Move a window to the top of its layer.
*/
void meta_stack_raise (MetaStack *stack,
MetaWindow *window);
/**
* Move a window to the bottom of its layer.
* meta_stack_lower:
* @stack: The stack to modify.
* @window: The window that's on the way downwards.
*
* \param stack The stack to modify.
* \param window The window that's on the way downwards.
* Move a window to the bottom of its layer.
*/
void meta_stack_lower (MetaStack *stack,
MetaWindow *window);
/**
* meta_stack_freeze:
* @stack: The stack to freeze.
*
* Prevent syncing to server until the next call of meta_stack_thaw(),
* so that we can carry out multiple operations in one go without having
* everything halfway reflected on the X server.
*
* (Calls to meta_stack_freeze() nest, so that multiple calls to
* meta_stack_freeze will require multiple calls to meta_stack_thaw().)
*
* \param stack The stack to freeze.
*/
void meta_stack_freeze (MetaStack *stack);
/**
* meta_stack_thaw:
* @stack: The stack to thaw.
*
* Undoes a meta_stack_freeze(), and processes anything which has become
* necessary during the freeze. It is an error to call this function if
* the stack has not been frozen.
*
* \param stack The stack to thaw.
*/
void meta_stack_thaw (MetaStack *stack);
/**
* meta_stack_get_top:
* @stack: The stack to examine.
*
* Finds the top window on the stack.
*
* \param stack The stack to examine.
* \return The top window on the stack, or NULL in the vanishingly unlikely
* event that you have no windows on your screen whatsoever.
* Returns: The top window on the stack, or %NULL in the vanishingly unlikely
* event that you have no windows on your screen whatsoever.
*/
MetaWindow* meta_stack_get_top (MetaStack *stack);
/**
* meta_stack_get_bottom:
* @stack: The stack to search
*
* Finds the window at the bottom of the stack. Since that's pretty much
* always the desktop, this isn't the most useful of functions, and nobody
* actually calls it. We should probably get rid of it.
*
* \param stack The stack to search
*/
MetaWindow* meta_stack_get_bottom (MetaStack *stack);
/**
* meta_stack_get_above:
* @stack: The stack to search.
* @window: The window to look above.
* @only_within_layer: If %TRUE, will return %NULL if @window is the
* top window in its layer.
*
* Finds the window above a given window in the stack.
* It is not an error to pass in a window which does not exist in
* the stack; the function will merely return NULL.
* the stack; the function will merely return %NULL.
*
* \param stack The stack to search.
* \param window The window to look above.
* \param only_within_layer If true, will return NULL if "window" is the
* top window in its layer.
* \return NULL if there is no such window;
* the window above "window" otherwise.
* Returns: %NULL if there is no such window;
* the window above @window otherwise.
*/
MetaWindow* meta_stack_get_above (MetaStack *stack,
MetaWindow *window,
gboolean only_within_layer);
/**
* meta_stack_get_below:
* @stack: The stack to search.
* @window: The window to look below.
* @only_within_layer: If %TRUE, will return %NULL if window is the
* bottom window in its layer.
*
* Finds the window below a given window in the stack.
* It is not an error to pass in a window which does not exist in
* the stack; the function will merely return NULL.
* the stack; the function will merely return %NULL.
*
* \param stack The stack to search.
* \param window The window to look below.
* \param only_within_layer If true, will return NULL if "window" is the
* bottom window in its layer.
* \return NULL if there is no such window;
* the window below "window" otherwise.
*
* Returns: %NULL if there is no such window;
* the window below @window otherwise.
*/
MetaWindow* meta_stack_get_below (MetaStack *stack,
MetaWindow *window,
gboolean only_within_layer);
/**
* Find the topmost, focusable, mapped, window in a stack. If you supply
* a window as "not_this_one", we won't return that one (presumably
* because it's going to be going away). But if you do supply "not_this_one"
* and we find its parent, we'll return that; and if "not_this_one" is in
* meta_stack_get_default_focus_window:
* @stack: The stack to search.
* @workspace: %NULL to search all workspaces; otherwise only windows
* from that workspace will be returned.
* @not_this_one: Window to ignore because it's being unfocussed or
* going away.
*
* Find the topmost, focusable, mapped, window in a stack. If you supply
* a window as @not_this_one, we won't return that one (presumably
* because it's going to be going away). But if you do supply @not_this_one
* and we find its parent, we'll return that; and if @not_this_one is in
* a group, we'll return the top window of that group.
*
* Also, we are prejudiced against dock windows. Every kind of window, even
* the desktop, will be returned in preference to a dock window.
*
* \param stack The stack to search.
* \param workspace NULL to search all workspaces; otherwise only windows
* from that workspace will be returned.
* \param not_this_one Window to ignore because it's being unfocussed or
* going away.
* \return The window matching all these constraints or NULL if none does.
*
* \bug Never called!
* Returns: The window matching all these constraints or %NULL if none does.
*/
MetaWindow* meta_stack_get_default_focus_window (MetaStack *stack,
MetaWorkspace *workspace,
MetaWindow *not_this_one);
/**
* meta_stack_get_default_focus_window_at_point:
* @stack: The stack to search.
* @workspace: %NULL to search all workspaces; otherwise only windows
* from that workspace will be returned.
* @not_this_one: Window to ignore because it's being unfocussed or
* going away.
* @root_x: The returned window must contain this point,
* unless it's a dock.
* @root_y: See root_x.
*
* Find the topmost, focusable, mapped, window in a stack. If you supply
* a window as "not_this_one", we won't return that one (presumably
* because it's going to be going away). But if you do supply "not_this_one"
* and we find its parent, we'll return that; and if "not_this_one" is in
* a window as @not_this_one, we won't return that one (presumably
* because it's going to be going away). But if you do supply @not_this_one
* and we find its parent, we'll return that; and if @not_this_one is in
* a group, we'll return the top window of that group.
*
* Also, we are prejudiced against dock windows. Every kind of window, even
* the desktop, will be returned in preference to a dock window.
*
* \param stack The stack to search.
* \param workspace NULL to search all workspaces; otherwise only windows
* from that workspace will be returned.
* \param not_this_one Window to ignore because it's being unfocussed or
* going away.
* \param root_x The returned window must contain this point,
* unless it's a dock.
* \param root_y See root_x.
* \return The window matching all these constraints or NULL if none does.
* Returns: The window matching all these constraints or %NULL if none does.
*/
MetaWindow* meta_stack_get_default_focus_window_at_point (MetaStack *stack,
MetaWorkspace *workspace,
@ -317,18 +340,25 @@ MetaWindow* meta_stack_get_default_focus_window_at_point (MetaStack *stack,
int root_y);
/**
* meta_stack_list_windows:
* @stack: The stack to examine.
* @workspace: If not %NULL, only windows on this workspace will be
* returned; otherwise all windows in the stack will be
* returned.
*
* Finds all the windows in the stack, in order.
*
* \param stack The stack to examine.
* \param workspace If non-NULL, only windows on this workspace will be
* returned; otherwise all windows in the stack will be
* returned.
* \return A list of windows, in stacking order, honouring layers.
* Returns: A list of windows, in stacking order, honouring layers.
*/
GList* meta_stack_list_windows (MetaStack *stack,
MetaWorkspace *workspace);
/**
* meta_stack_windows_cmp:
* @stack: A stack containing both window_a and window_b
* @window_a: A window
* @window_b Another window
*
* Comparison function for windows within a stack. This is not directly
* suitable for use within a standard comparison routine, because it takes
* an extra parameter; you will need to wrap it.
@ -339,9 +369,6 @@ GList* meta_stack_list_windows (MetaStack *stack,
*
* (FIXME: Apparently identical to compare_window_position(). Merge them.)
*
* \param stack A stack containing both window_a and window_b
* \param window_a A window
* \param window_b Another window
* \return -1 if window_a is below window_b, honouring layers; 1 if it's
* above it; 0 if you passed in the same window twice!
*/
@ -350,37 +377,44 @@ int meta_stack_windows_cmp (MetaStack *stack,
MetaWindow *window_b);
/**
* meta_window_set_stack_position:
* @window: The window which is moving.
* @position: Where it should move to (0 is the bottom).
*
* Sets the position of a window within the stack. This will only move it
* up or down within its layer. It is an error to attempt to move this
* below position zero or above the last position in the stack (however, since
* we don't provide a simple way to tell the number of windows in the stack,
* this requirement may not be easy to fulfil).
*
* \param window The window which is moving.
* \param position Where it should move to (0 is the bottom).
*/
void meta_window_set_stack_position (MetaWindow *window,
int position);
/**
* meta_stack_get_positions:
* @stack: The stack to examine.
*
* Returns the current stack state, allowing rudimentary transactions.
*
* \param stack The stack to examine.
* \return An opaque GList representing the current stack sort order;
* it is the caller's responsibility to free it.
* Pass this to meta_stack_set_positions() later if you want to restore
* the state to where it was when you called this function.
* Returns: An opaque GList representing the current stack sort order;
* it is the caller's responsibility to free it.
* Pass this to meta_stack_set_positions() later if you want to restore
* the state to where it was when you called this function.
*/
GList* meta_stack_get_positions (MetaStack *stack);
/**
* meta_stack_set_positions:
* @stack: The stack to roll back.
* @windows: The list returned from meta_stack_get_positions().
*
* Rolls back a transaction, given the list returned from
* meta_stack_get_positions().
*
* \param stack The stack to roll back.
* \param windows The list returned from meta_stack_get_positions().
*/
void meta_stack_set_positions (MetaStack *stack,
GList *windows);
void meta_stack_update_window_tile_matches (MetaStack *stack,
MetaWorkspace *workspace);
#endif

View File

@ -47,37 +47,6 @@ meta_topic_real_valist (MetaDebugTopic topic,
va_list args);
#endif
#ifdef HAVE_BACKTRACE
#include <execinfo.h>
void
meta_print_backtrace (void)
{
void *bt[500];
int bt_size;
int i;
char **syms;
bt_size = backtrace (bt, 500);
syms = backtrace_symbols (bt, bt_size);
i = 0;
while (i < bt_size)
{
meta_verbose (" %s\n", syms[i]);
++i;
}
free (syms);
}
#else
void
meta_print_backtrace (void)
{
meta_verbose ("Not compiled with backtrace support\n");
}
#endif
static gint verbose_topics = 0;
static gboolean is_debugging = FALSE;
static gboolean replace_current = FALSE;
@ -441,8 +410,6 @@ meta_bug (const char *format, ...)
fflush (out);
g_free (str);
meta_print_backtrace ();
/* stop us in a debugger */
abort ();
@ -921,6 +888,7 @@ meta_later_remove (guint later_id)
* repaint func run and get removed
*/
destroy_later (later);
return;
}
}
}

View File

@ -101,9 +101,12 @@ struct _MetaWindow
char *startup_id;
char *mutter_hints;
char *gtk_theme_variant;
char *dbus_application_id;
char *dbus_unique_name;
char *dbus_object_path;
char *gtk_application_id;
char *gtk_unique_bus_name;
char *gtk_application_object_path;
char *gtk_window_object_path;
char *gtk_app_menu_object_path;
char *gtk_menubar_object_path;
int hide_titlebar_when_maximized;
int net_wm_pid;
@ -407,6 +410,9 @@ struct _MetaWindow
/* Focused window that is (directly or indirectly) attached to this one */
MetaWindow *attached_focus_window;
/* The currently complementary tiled window, if any */
MetaWindow *tile_match;
};
struct _MetaWindowClass
@ -466,20 +472,8 @@ void meta_window_unmaximize_with_gravity (MetaWindow *window,
int new_width,
int new_height,
int gravity);
void meta_window_make_above (MetaWindow *window);
void meta_window_unmake_above (MetaWindow *window);
void meta_window_shade (MetaWindow *window,
guint32 timestamp);
void meta_window_unshade (MetaWindow *window,
guint32 timestamp);
void meta_window_change_workspace (MetaWindow *window,
MetaWorkspace *workspace);
void meta_window_stick (MetaWindow *window);
void meta_window_unstick (MetaWindow *window);
void meta_window_make_fullscreen_internal (MetaWindow *window);
void meta_window_make_fullscreen (MetaWindow *window);
void meta_window_unmake_fullscreen (MetaWindow *window);
void meta_window_update_fullscreen_monitors (MetaWindow *window,
unsigned long top,
unsigned long bottom,
@ -506,7 +500,8 @@ void meta_window_resize_with_gravity (MetaWindow *window,
int w,
int h,
int gravity);
void meta_window_change_workspace (MetaWindow *window,
MetaWorkspace *workspace);
/* Return whether the window should be currently mapped */
gboolean meta_window_should_be_showing (MetaWindow *window);
@ -545,10 +540,6 @@ void meta_window_get_geometry (MetaWindow *window,
int *width,
int *height);
void meta_window_kill (MetaWindow *window);
void meta_window_focus (MetaWindow *window,
guint32 timestamp);
void meta_window_update_unfocused_button_grabs (MetaWindow *window);
/* Sends a client message */
@ -626,11 +617,6 @@ void meta_window_refresh_resize_popup (MetaWindow *window);
void meta_window_free_delete_dialog (MetaWindow *window);
void meta_window_begin_grab_op (MetaWindow *window,
MetaGrabOp op,
gboolean frame_action,
guint32 timestamp);
void meta_window_update_keyboard_resize (MetaWindow *window,
gboolean update_cursor);
void meta_window_update_keyboard_move (MetaWindow *window);
@ -660,4 +646,6 @@ void meta_window_propagate_focus_appearance (MetaWindow *window,
gboolean meta_window_should_attach_to_parent (MetaWindow *window);
gboolean meta_window_can_tile_side_by_side (MetaWindow *window);
void meta_window_compute_tile_match (MetaWindow *window);
#endif

View File

@ -1,7 +1,8 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/**
* \file window-props.c MetaWindow property handling
* SECTION:window-props
* @short_description: #MetaWindow property handling
*
* A system which can inspect sets of properties of given windows
* and take appropriate action given their values.
@ -389,11 +390,13 @@ reload_net_wm_user_time_window (MetaWindow *window,
#define MAX_TITLE_LENGTH 512
/**
* Called by set_window_title and set_icon_title to set the value of
* *target to title. It required and atom is set, it will update the
* set_title_text:
*
* Called by set_window_title() and set_icon_title() to set the value of
* @target to @title. It required and @atom is set, it will update the
* appropriate property.
*
* Returns TRUE if a new title was set.
* Returns: %TRUE if a new title was set.
*/
static gboolean
set_title_text (MetaWindow *window,
@ -1597,7 +1600,7 @@ reload_gtk_hide_titlebar_when_maximized (MetaWindow *window,
gboolean requested_value = FALSE;
gboolean current_value = window->hide_titlebar_when_maximized;
if (value->type != META_PROP_VALUE_INVALID)
if (!meta_prefs_get_ignore_request_hide_titlebar () && value->type != META_PROP_VALUE_INVALID)
{
requested_value = ((int) value->v.cardinal == 1);
meta_verbose ("Request to hide titlebar for window %s.\n", window->desc);
@ -1617,73 +1620,35 @@ reload_gtk_hide_titlebar_when_maximized (MetaWindow *window,
}
}
static void
reload_dbus_application_id (MetaWindow *window,
MetaPropValue *value,
gboolean initial)
{
char *new_id = NULL;
char *current_id = window->dbus_application_id;
#define RELOAD_STRING(var_name, propname) \
static void \
reload_ ## var_name (MetaWindow *window, \
MetaPropValue *value, \
gboolean initial) \
{ \
g_free (window->var_name); \
\
if (value->type != META_PROP_VALUE_INVALID) \
window->var_name = g_strdup (value->v.str); \
else \
window->var_name = NULL; \
\
g_object_notify (G_OBJECT (window), propname); \
}
if (value->type != META_PROP_VALUE_INVALID)
new_id = value->v.str;
RELOAD_STRING (gtk_unique_bus_name, "gtk-unique-bus-name")
RELOAD_STRING (gtk_application_id, "gtk-application-id")
RELOAD_STRING (gtk_application_object_path, "gtk-application-object-path")
RELOAD_STRING (gtk_window_object_path, "gtk-window-object-path")
RELOAD_STRING (gtk_app_menu_object_path, "gtk-app-menu-object-path")
RELOAD_STRING (gtk_menubar_object_path, "gtk-menubar-object-path")
if (g_strcmp0 (new_id, current_id) != 0)
{
g_free (current_id);
if (new_id)
window->dbus_application_id = g_strdup (new_id);
else
window->dbus_application_id = NULL;
g_object_notify ((GObject*)window, "dbus-application-id");
}
}
static void
reload_dbus_unique_name (MetaWindow *window,
MetaPropValue *value,
gboolean initial)
{
char *new_id = NULL;
char *current_id = window->dbus_unique_name;
if (value->type != META_PROP_VALUE_INVALID)
new_id = value->v.str;
if (g_strcmp0 (new_id, current_id) != 0)
{
g_free (current_id);
window->dbus_unique_name = g_strdup (new_id);
g_object_notify ((GObject*)window, "dbus-unique-name");
}
}
static void
reload_dbus_object_path (MetaWindow *window,
MetaPropValue *value,
gboolean initial)
{
char *new_path = NULL;
char *current_path = window->dbus_object_path;
if (value->type != META_PROP_VALUE_INVALID)
new_path = value->v.str;
if (g_strcmp0 (new_path, current_path) != 0)
{
g_free (current_path);
window->dbus_object_path = g_strdup (new_path);
g_object_notify ((GObject*)window, "dbus-object-path");
}
}
#undef RELOAD_STRING
/**
* meta_display_init_window_prop_hooks:
* @display: The #MetaDisplay
*
* Initialises the property hooks system. Each row in the table named "hooks"
* represents an action to take when a property is found on a newly-created
* window, or when a property changes its value.
@ -1737,9 +1702,12 @@ meta_display_init_window_prop_hooks (MetaDisplay *display)
{ XA_WM_TRANSIENT_FOR, META_PROP_VALUE_WINDOW, reload_transient_for, TRUE, FALSE },
{ display->atom__GTK_THEME_VARIANT, META_PROP_VALUE_UTF8, reload_gtk_theme_variant, TRUE, FALSE },
{ display->atom__GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED, META_PROP_VALUE_CARDINAL, reload_gtk_hide_titlebar_when_maximized, TRUE, FALSE },
{ display->atom__DBUS_APPLICATION_ID, META_PROP_VALUE_UTF8, reload_dbus_application_id, TRUE, FALSE },
{ display->atom__DBUS_UNIQUE_NAME, META_PROP_VALUE_UTF8, reload_dbus_unique_name, TRUE, FALSE },
{ display->atom__DBUS_OBJECT_PATH, META_PROP_VALUE_UTF8, reload_dbus_object_path, TRUE, FALSE },
{ display->atom__GTK_APPLICATION_ID, META_PROP_VALUE_UTF8, reload_gtk_application_id, TRUE, FALSE },
{ display->atom__GTK_UNIQUE_BUS_NAME, META_PROP_VALUE_UTF8, reload_gtk_unique_bus_name, TRUE, FALSE },
{ display->atom__GTK_APPLICATION_OBJECT_PATH, META_PROP_VALUE_UTF8, reload_gtk_application_object_path, TRUE, FALSE },
{ display->atom__GTK_WINDOW_OBJECT_PATH, META_PROP_VALUE_UTF8, reload_gtk_window_object_path, TRUE, FALSE },
{ display->atom__GTK_APP_MENU_OBJECT_PATH, META_PROP_VALUE_UTF8, reload_gtk_app_menu_object_path, TRUE, FALSE },
{ display->atom__GTK_MENUBAR_OBJECT_PATH, META_PROP_VALUE_UTF8, reload_gtk_menubar_object_path, TRUE, FALSE },
{ display->atom__NET_WM_USER_TIME_WINDOW, META_PROP_VALUE_WINDOW, reload_net_wm_user_time_window, TRUE, FALSE },
{ display->atom_WM_STATE, META_PROP_VALUE_INVALID, NULL, FALSE, FALSE },
{ display->atom__NET_WM_ICON, META_PROP_VALUE_INVALID, reload_net_wm_icon, FALSE, FALSE },

View File

@ -1,7 +1,8 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/**
* \file window-props.h MetaWindow property handling
* SECTION:window-props
* @short_description: MetaWindow property handling
*
* A system which can inspect sets of properties of given windows
* and take appropriate action given their values.
@ -35,12 +36,13 @@
#include "window-private.h"
/**
* meta_window_reload_property:
* @window: The window.
* @property: A single X atom.
*
* Requests the current values of a single property for a given
* window from the server, and deals with it appropriately.
* Does not return it to the caller (it's been dealt with!)
*
* \param window The window.
* \param property A single X atom.
*/
void meta_window_reload_property (MetaWindow *window,
Atom property,
@ -48,13 +50,14 @@ void meta_window_reload_property (MetaWindow *window,
/**
* meta_window_reload_properties:
* @window: The window.
* @properties: A pointer to a list of X atoms, "n_properties" long.
* @n_properties: The length of the properties list.
*
* Requests the current values of a set of properties for a given
* window from the server, and deals with them appropriately.
* Does not return them to the caller (they've been dealt with!)
*
* \param window The window.
* \param properties A pointer to a list of X atoms, "n_properties" long.
* \param n_properties The length of the properties list.
*/
void meta_window_reload_properties (MetaWindow *window,
const Atom *properties,
@ -62,14 +65,15 @@ void meta_window_reload_properties (MetaWindow *window,
gboolean initial);
/**
* meta_window_reload_property_from_xwindow:
* @window: A window on the same display as the one we're
* investigating (only used to find the display)
* @xwindow: The X handle for the window.
* @property: A single X atom.
*
* Requests the current values of a single property for a given
* window from the server, and deals with it appropriately.
* Does not return it to the caller (it's been dealt with!)
*
* \param window A window on the same display as the one we're
* investigating (only used to find the display)
* \param xwindow The X handle for the window.
* \param property A single X atom.
*/
void meta_window_reload_property_from_xwindow
(MetaWindow *window,
@ -78,15 +82,16 @@ void meta_window_reload_property_from_xwindow
gboolean initial);
/**
* meta_window_reload_properties_from_xwindow:
* @window: A window on the same display as the one we're
* investigating (only used to find the display)
* @xwindow: The X handle for the window.
* @properties: A pointer to a list of X atoms, "n_properties" long.
* @n_properties: The length of the properties list.
*
* Requests the current values of a set of properties for a given
* window from the server, and deals with them appropriately.
* Does not return them to the caller (they've been dealt with!)
*
* \param window A window on the same display as the one we're
* investigating (only used to find the display)
* \param xwindow The X handle for the window.
* \param properties A pointer to a list of X atoms, "n_properties" long.
* \param n_properties The length of the properties list.
*/
void meta_window_reload_properties_from_xwindow
(MetaWindow *window,
@ -96,41 +101,44 @@ void meta_window_reload_properties_from_xwindow
gboolean initial);
/**
* meta_window_load_initial_properties:
* @window: The window.
*
* Requests the current values for standard properties for a given
* window from the server, and deals with them appropriately.
* Does not return them to the caller (they've been dealt with!)
*
* \param window The window.
*/
void meta_window_load_initial_properties (MetaWindow *window);
/**
* meta_display_init_window_prop_hooks:
* @display: The display.
*
* Initialises the hooks used for the reload_propert* functions
* on a particular display, and stores a pointer to them in the
* display.
*
* \param display The display.
*/
void meta_display_init_window_prop_hooks (MetaDisplay *display);
/**
* meta_display_free_window_prop_hooks:
* @display: The display.
* Frees the hooks used for the reload_propert* functions
* for a particular display.
*
* \param display The display.
*/
void meta_display_free_window_prop_hooks (MetaDisplay *display);
/**
* meta_set_normal_hints:
* @window: The window to set the size hints on.
* @hints: Either some X size hints, or NULL for default.
*
* Sets the size hints for a window. This happens when a
* WM_NORMAL_HINTS property is set on a window, but it is public
* because the size hints are set to defaults when a window is
* created. See
* http://tronche.com/gui/x/icccm/sec-4.html#WM_NORMAL_HINTS
* for the X details.
*
* \param window The window to set the size hints on.
* \param hints Either some X size hints, or NULL for default.
*/
void meta_set_normal_hints (MetaWindow *window,
XSizeHints *hints);

View File

@ -48,6 +48,7 @@
#include <X11/Xatom.h>
#include <X11/Xlibint.h> /* For display->resource_mask */
#include <string.h>
#include <math.h>
#ifdef HAVE_SHAPE
#include <X11/extensions/shape.h>
@ -55,6 +56,12 @@
#include <X11/extensions/Xcomposite.h>
/* Windows that unmaximize to a size bigger than that fraction of the workarea
* will be scaled down to that size (while maintaining aspect ratio).
* Windows that cover an area greater then this size are automaximized on map.
*/
#define MAX_UNMAXIMIZED_WINDOW_AREA .8
static int destroying_windows_disallowed = 0;
@ -165,9 +172,12 @@ enum {
PROP_RESIZEABLE,
PROP_ABOVE,
PROP_WM_CLASS,
PROP_DBUS_APPLICATION_ID,
PROP_DBUS_UNIQUE_NAME,
PROP_DBUS_OBJECT_PATH
PROP_GTK_APPLICATION_ID,
PROP_GTK_UNIQUE_BUS_NAME,
PROP_GTK_APPLICATION_OBJECT_PATH,
PROP_GTK_WINDOW_OBJECT_PATH,
PROP_GTK_APP_MENU_OBJECT_PATH,
PROP_GTK_MENUBAR_OBJECT_PATH
};
enum
@ -188,12 +198,18 @@ prefs_changed_callback (MetaPreference pref,
{
MetaWindow *window = data;
if (pref != META_PREF_WORKSPACES_ONLY_ON_PRIMARY)
return;
meta_window_update_on_all_workspaces (window);
meta_window_queue (window, META_QUEUE_CALC_SHOWING);
if (pref == META_PREF_WORKSPACES_ONLY_ON_PRIMARY)
{
meta_window_update_on_all_workspaces (window);
meta_window_queue (window, META_QUEUE_CALC_SHOWING);
}
else if (pref == META_PREF_ATTACH_MODAL_DIALOGS &&
window->type == META_WINDOW_MODAL_DIALOG)
{
window->attached = meta_window_should_attach_to_parent (window);
recalc_window_features (window);
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
}
}
static void
@ -212,8 +228,6 @@ meta_window_finalize (GObject *object)
meta_icon_cache_free (&window->icon_cache);
meta_prefs_remove_listener (prefs_changed_callback, window);
g_free (window->sm_client_id);
g_free (window->wm_client_machine);
g_free (window->startup_id);
@ -224,9 +238,12 @@ meta_window_finalize (GObject *object)
g_free (window->icon_name);
g_free (window->desc);
g_free (window->gtk_theme_variant);
g_free (window->dbus_application_id);
g_free (window->dbus_unique_name);
g_free (window->dbus_object_path);
g_free (window->gtk_application_id);
g_free (window->gtk_unique_bus_name);
g_free (window->gtk_application_object_path);
g_free (window->gtk_window_object_path);
g_free (window->gtk_app_menu_object_path);
g_free (window->gtk_menubar_object_path);
}
static void
@ -290,14 +307,23 @@ meta_window_get_property(GObject *object,
case PROP_ABOVE:
g_value_set_boolean (value, win->wm_state_above);
break;
case PROP_DBUS_APPLICATION_ID:
g_value_set_string (value, win->dbus_application_id);
case PROP_GTK_APPLICATION_ID:
g_value_set_string (value, win->gtk_application_id);
break;
case PROP_DBUS_UNIQUE_NAME:
g_value_set_string (value, win->dbus_unique_name);
case PROP_GTK_UNIQUE_BUS_NAME:
g_value_set_string (value, win->gtk_unique_bus_name);
break;
case PROP_DBUS_OBJECT_PATH:
g_value_set_string (value, win->dbus_object_path);
case PROP_GTK_APPLICATION_OBJECT_PATH:
g_value_set_string (value, win->gtk_application_object_path);
break;
case PROP_GTK_WINDOW_OBJECT_PATH:
g_value_set_string (value, win->gtk_window_object_path);
break;
case PROP_GTK_APP_MENU_OBJECT_PATH:
g_value_set_string (value, win->gtk_app_menu_object_path);
break;
case PROP_GTK_MENUBAR_OBJECT_PATH:
g_value_set_string (value, win->gtk_menubar_object_path);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -396,7 +422,7 @@ meta_window_class_init (MetaWindowClass *klass)
g_param_spec_enum ("window-type",
"Window Type",
"The type of the window",
MUTTER_TYPE_WINDOW_TYPE,
META_TYPE_WINDOW_TYPE,
META_WINDOW_NORMAL,
G_PARAM_READABLE));
@ -466,26 +492,50 @@ meta_window_class_init (MetaWindowClass *klass)
G_PARAM_READABLE));
g_object_class_install_property (object_class,
PROP_DBUS_APPLICATION_ID,
g_param_spec_string ("dbus-application-id",
"DBusApplicationID",
"Contents of the _DBUS_APPLICATION_ID property of this window",
PROP_GTK_APPLICATION_ID,
g_param_spec_string ("gtk-application-id",
"_GTK_APPLICATION_ID",
"Contents of the _GTK_APPLICATION_ID property of this window",
NULL,
G_PARAM_READABLE));
g_object_class_install_property (object_class,
PROP_DBUS_UNIQUE_NAME,
g_param_spec_string ("dbus-unique-name",
"_DBUS_UNIQUE_NAME",
"Contents of the _DBUS_UNIQUE_NAME property of this window",
PROP_GTK_UNIQUE_BUS_NAME,
g_param_spec_string ("gtk-unique-bus-name",
"_GTK_UNIQUE_BUS_NAME",
"Contents of the _GTK_UNIQUE_BUS_NAME property of this window",
NULL,
G_PARAM_READABLE));
g_object_class_install_property (object_class,
PROP_DBUS_OBJECT_PATH,
g_param_spec_string ("dbus-object-path",
"_DBUS_OBJECT_PATH",
"Contents of the _DBUS_OBJECT_PATH property of this window",
PROP_GTK_APPLICATION_OBJECT_PATH,
g_param_spec_string ("gtk-application-object-path",
"_GTK_APPLICATION_OBJECT_PATH",
"Contents of the _GTK_APPLICATION_OBJECT_PATH property of this window",
NULL,
G_PARAM_READABLE));
g_object_class_install_property (object_class,
PROP_GTK_WINDOW_OBJECT_PATH,
g_param_spec_string ("gtk-window-object-path",
"_GTK_WINDOW_OBJECT_PATH",
"Contents of the _GTK_WINDOW_OBJECT_PATH property of this window",
NULL,
G_PARAM_READABLE));
g_object_class_install_property (object_class,
PROP_GTK_APP_MENU_OBJECT_PATH,
g_param_spec_string ("gtk-app-menu-object-path",
"_GTK_APP_MENU_OBJECT_PATH",
"Contents of the _GTK_APP_MENU_OBJECT_PATH property of this window",
NULL,
G_PARAM_READABLE));
g_object_class_install_property (object_class,
PROP_GTK_MENUBAR_OBJECT_PATH,
g_param_spec_string ("gtk-menubar-object-path",
"_GTK_MENUBAR_OBJECT_PATH",
"Contents of the _GTK_MENUBAR_OBJECT_PATH property of this window",
NULL,
G_PARAM_READABLE));
@ -1123,6 +1173,8 @@ meta_window_new_with_attrs (MetaDisplay *display,
window->monitor = meta_screen_get_monitor_for_window (window->screen, window);
window->tile_match = NULL;
if (window->override_redirect)
{
window->decorated = FALSE;
@ -1856,6 +1908,8 @@ meta_window_unmanage (MetaWindow *window,
meta_error_trap_pop (window->display);
meta_prefs_remove_listener (prefs_changed_callback, window);
g_signal_emit (window, window_signals[UNMANAGED], 0);
g_object_unref (window);
@ -2177,7 +2231,7 @@ implement_showing (MetaWindow *window,
* so we should place the window even if we're hiding it rather
* than showing it.
*/
if (!window->placed && meta_prefs_get_live_hidden_windows ())
if (!window->placed)
meta_window_force_placement (window);
meta_window_hide (window);
@ -2779,20 +2833,6 @@ map_frame (MetaWindow *window)
return FALSE;
}
static gboolean
unmap_frame (MetaWindow *window)
{
if (window->frame && window->frame->mapped)
{
meta_topic (META_DEBUG_WINDOW_STATE, "Frame actually needs unmap\n");
window->frame->mapped = FALSE;
meta_ui_unmap_frame (window->screen->ui, window->frame->xwindow);
return TRUE;
}
else
return FALSE;
}
static gboolean
map_client_window (MetaWindow *window)
{
@ -2969,7 +3009,20 @@ meta_window_show (MetaWindow *window)
}
if (!window->placed)
meta_window_force_placement (window);
{
if (window->showing_for_first_time && window->has_maximize_func)
{
MetaRectangle work_area;
meta_window_get_work_area_for_monitor (window, window->monitor->number, &work_area);
/* Automaximize windows that map with a size > MAX_UNMAXIMIZED_WINDOW_AREA of the work area */
if (window->rect.width * window->rect.height > work_area.width * work_area.height * MAX_UNMAXIMIZED_WINDOW_AREA)
{
window->maximize_horizontally_after_placement = TRUE;
window->maximize_vertically_after_placement = TRUE;
}
}
meta_window_force_placement (window);
}
if (needs_stacking_adjustment)
{
@ -3047,15 +3100,12 @@ meta_window_show (MetaWindow *window)
if (map_client_window (window))
did_show = TRUE;
if (meta_prefs_get_live_hidden_windows ())
if (window->hidden)
{
if (window->hidden)
{
meta_stack_freeze (window->screen->stack);
window->hidden = FALSE;
meta_stack_thaw (window->screen->stack);
did_show = TRUE;
}
meta_stack_freeze (window->screen->stack);
window->hidden = FALSE;
meta_stack_thaw (window->screen->stack);
did_show = TRUE;
}
if (window->iconic)
@ -3190,32 +3240,19 @@ meta_window_hide (MetaWindow *window)
did_hide = FALSE;
if (meta_prefs_get_live_hidden_windows ())
{
/* If this is the first time that we've calculating the showing
* state of the window, the frame and client window might not
* yet be mapped, so we need to map them now */
map_frame (window);
map_client_window (window);
/* If this is the first time that we've calculating the showing
* state of the window, the frame and client window might not
* yet be mapped, so we need to map them now */
map_frame (window);
map_client_window (window);
if (!window->hidden)
{
meta_stack_freeze (window->screen->stack);
window->hidden = TRUE;
meta_stack_thaw (window->screen->stack);
did_hide = TRUE;
}
}
else
if (!window->hidden)
{
/* Unmapping the frame is enough to make the window disappear,
* but we need to hide the window itself so the client knows
* it has been hidden */
if (unmap_frame (window))
did_hide = TRUE;
if (unmap_client_window (window, " (hiding)"))
did_hide = TRUE;
meta_stack_freeze (window->screen->stack);
window->hidden = TRUE;
meta_stack_thaw (window->screen->stack);
did_hide = TRUE;
}
if (!window->iconic)
@ -3391,10 +3428,11 @@ meta_window_save_rect (MetaWindow *window)
}
/**
* force_save_user_window_placement:
* @window: Store current position of this window for future reference
*
* Save the user_rect regardless of whether the window is maximized or
* fullscreen. See save_user_window_placement() for most uses.
*
* \param window Store current position of this window for future reference
*/
static void
force_save_user_window_placement (MetaWindow *window)
@ -3403,11 +3441,12 @@ force_save_user_window_placement (MetaWindow *window)
}
/**
* save_user_window_placement:
* @window: Store current position of this window for future reference
*
* Save the user_rect, but only if the window is neither maximized nor
* fullscreen, otherwise the window may snap back to those dimensions
* (bug #461927).
*
* \param window Store current position of this window for future reference
*/
static void
save_user_window_placement (MetaWindow *window)
@ -3641,14 +3680,15 @@ meta_window_can_tile_maximized (MetaWindow *window)
gboolean
meta_window_can_tile_side_by_side (MetaWindow *window)
{
const MetaMonitorInfo *monitor;
int monitor;
MetaRectangle tile_area;
MetaFrameBorders borders;
if (!meta_window_can_tile_maximized (window))
return FALSE;
monitor = meta_screen_get_current_monitor (window->screen);
meta_window_get_work_area_for_monitor (window, monitor->number, &tile_area);
meta_window_get_work_area_for_monitor (window, monitor, &tile_area);
/* Do not allow tiling in portrait orientation */
if (tile_area.height > tile_area.width)
@ -3656,15 +3696,10 @@ meta_window_can_tile_side_by_side (MetaWindow *window)
tile_area.width /= 2;
if (window->frame)
{
MetaFrameBorders borders;
meta_frame_calc_borders (window->frame, &borders);
meta_frame_calc_borders (window->frame, &borders);
tile_area.width -= (borders.visible.left + borders.visible.right);
tile_area.height -= (borders.visible.top + borders.visible.bottom);
}
tile_area.width -= (borders.visible.left + borders.visible.right);
tile_area.height -= (borders.visible.top + borders.visible.bottom);
return tile_area.width >= window->size_hints.min_width &&
tile_area.height >= window->size_hints.min_height;
@ -3727,6 +3762,9 @@ meta_window_unmaximize_internal (MetaWindow *window,
(unmaximize_vertically && window->maximized_vertically))
{
MetaRectangle target_rect;
MetaRectangle work_area;
meta_window_get_work_area_for_monitor (window, window->monitor->number, &work_area);
meta_topic (META_DEBUG_WINDOW_OPS,
"Unmaximizing %s%s\n",
@ -3751,6 +3789,28 @@ meta_window_unmaximize_internal (MetaWindow *window,
* being unmaximized.
*/
meta_window_get_client_root_coords (window, &target_rect);
/* Avoid unmaximizing to "almost maximized" size when the previous size
* is greater then 80% of the work area use MAX_UNMAXIMIZED_WINDOW_AREA of the work area as upper limit
* while maintaining the aspect ratio.
*/
if (unmaximize_horizontally && unmaximize_vertically &&
desired_rect->width * desired_rect->height > work_area.width * work_area.height * MAX_UNMAXIMIZED_WINDOW_AREA)
{
if (desired_rect->width > desired_rect->height)
{
float aspect = (float)desired_rect->height / (float)desired_rect->width;
desired_rect->width = MAX (work_area.width * sqrt (MAX_UNMAXIMIZED_WINDOW_AREA), window->size_hints.min_width);
desired_rect->height = MAX (desired_rect->width * aspect, window->size_hints.min_height);
}
else
{
float aspect = (float)desired_rect->width / (float)desired_rect->height;
desired_rect->height = MAX (work_area.height * sqrt (MAX_UNMAXIMIZED_WINDOW_AREA), window->size_hints.min_height);
desired_rect->width = MAX (desired_rect->height * aspect, window->size_hints.min_width);
}
}
if (unmaximize_horizontally)
{
target_rect.x = desired_rect->x;
@ -3829,15 +3889,6 @@ void
meta_window_unmaximize (MetaWindow *window,
MetaMaximizeFlags directions)
{
/* Restore tiling if necessary */
if (window->tile_mode == META_TILE_LEFT ||
window->tile_mode == META_TILE_RIGHT)
{
window->maximized_horizontally = FALSE;
meta_window_tile (window);
return;
}
meta_window_unmaximize_internal (window, directions, &window->saved_rect,
NorthWestGravity);
}
@ -4468,6 +4519,10 @@ meta_window_update_monitor (MetaWindow *window)
if (old)
g_signal_emit_by_name (window->screen, "window-left-monitor", old->number, window);
g_signal_emit_by_name (window->screen, "window-entered-monitor", window->monitor->number, window);
/* If we're changing monitors, we need to update the has_maximize_func flag,
* as the working area has changed. */
recalc_window_features (window);
}
}
@ -4521,8 +4576,6 @@ meta_window_move_resize_internal (MetaWindow *window,
gboolean need_move_frame = FALSE;
gboolean need_resize_client = FALSE;
gboolean need_resize_frame = FALSE;
int frame_size_dx;
int frame_size_dy;
int size_dx;
int size_dy;
gboolean frame_shape_changed = FALSE;
@ -4560,9 +4613,8 @@ meta_window_move_resize_internal (MetaWindow *window,
is_user_action ? " (user move/resize)" : "",
old_rect.x, old_rect.y, old_rect.width, old_rect.height);
if (window->frame)
meta_frame_calc_borders (window->frame,
&borders);
meta_frame_calc_borders (window->frame,
&borders);
new_rect.x = root_x_nw;
new_rect.y = root_y_nw;
@ -4624,6 +4676,7 @@ meta_window_move_resize_internal (MetaWindow *window,
if (window->frame)
{
int frame_size_dx, frame_size_dy;
int new_w, new_h;
new_w = window->rect.width + borders.total.left + borders.total.right;
@ -4646,11 +4699,6 @@ meta_window_move_resize_internal (MetaWindow *window,
window->frame->rect.width,
window->frame->rect.height);
}
else
{
frame_size_dx = 0;
frame_size_dy = 0;
}
/* For nice effect, when growing the window we want to move/resize
* the frame first, when shrinking the window we want to move/resize
@ -4938,6 +4986,9 @@ meta_window_move_resize_internal (MetaWindow *window,
}
meta_window_foreach_transient (window, maybe_move_attached_dialog, NULL);
meta_stack_update_window_tile_matches (window->screen->stack,
window->screen->active_workspace);
}
/**
@ -5023,11 +5074,16 @@ meta_window_move_frame (MetaWindow *window,
if (window->frame)
{
/* offset by the distance between the origin of the window
* and the origin of the enclosing window decorations
MetaFrameBorders borders;
meta_frame_calc_borders (window->frame, &borders);
/* root_x_nw and root_y_nw correspond to where the top of
* the visible frame should be. Offset by the distance between
* the origin of the window and the origin of the enclosing
* window decorations.
*/
x += window->frame->child_x;
y += window->frame->child_y;
x += window->frame->child_x - borders.invisible.left;
y += window->frame->child_y - borders.invisible.top;
}
meta_window_move (window, user_op, x, y);
}
@ -5077,18 +5133,17 @@ meta_window_move_resize_frame (MetaWindow *window,
int w,
int h)
{
if (window->frame)
{
MetaFrameBorders borders;
meta_frame_calc_borders (window->frame, &borders);
/* offset by the distance between the origin of the window
* and the origin of the enclosing window decorations ( + border)
*/
root_x_nw += borders.visible.left;
root_y_nw += borders.visible.top;
w -= borders.visible.left + borders.visible.right;
h -= borders.visible.top + borders.visible.bottom;
}
MetaFrameBorders borders;
meta_frame_calc_borders (window->frame, &borders);
/* offset by the distance between the origin of the window
* and the origin of the enclosing window decorations ( + border)
*/
root_x_nw += borders.visible.left;
root_y_nw += borders.visible.top;
w -= borders.visible.left + borders.visible.right;
h -= borders.visible.top + borders.visible.bottom;
meta_window_move_resize (window, user_op, root_x_nw, root_y_nw, w, h);
}
@ -5619,6 +5674,9 @@ meta_window_change_workspace (MetaWindow *window,
{
g_return_if_fail (!window->override_redirect);
if (window->always_sticky)
return;
meta_window_change_workspace_without_transients (window, workspace);
meta_window_foreach_transient (window, change_workspace_foreach,
@ -5720,26 +5778,22 @@ meta_window_get_net_wm_desktop (MetaWindow *window)
static void
update_net_frame_extents (MetaWindow *window)
{
unsigned long data[4] = { 0, 0, 0, 0 };
unsigned long data[4];
MetaFrameBorders borders;
if (window->frame)
{
MetaFrameBorders borders;
meta_frame_calc_borders (window->frame, &borders);
/* Left */
data[0] = borders.visible.left;
/* Right */
data[1] = borders.visible.right;
/* Top */
data[2] = borders.visible.top;
/* Bottom */
data[3] = borders.visible.bottom;
}
meta_frame_calc_borders (window->frame, &borders);
/* Left */
data[0] = borders.visible.left;
/* Right */
data[1] = borders.visible.right;
/* Top */
data[2] = borders.visible.top;
/* Bottom */
data[3] = borders.visible.bottom;
meta_topic (META_DEBUG_GEOMETRY,
"Setting _NET_FRAME_EXTENTS on managed window 0x%lx "
"to left = %lu, right = %lu, top = %lu, bottom = %lu\n",
"to left = %lu, right = %lu, top = %lu, bottom = %lu\n",
window->xwindow, data[0], data[1], data[2], data[3]);
meta_error_trap_push (window->display);
@ -7381,8 +7435,10 @@ meta_window_get_workspaces (MetaWindow *window)
{
if (window->on_all_workspaces)
return window->screen->workspaces;
else
else if (window->workspace != NULL)
return window->workspace->list_containing_self;
else
return NULL;
}
static void
@ -7922,6 +7978,23 @@ recalc_window_features (MetaWindow *window)
window->has_maximize_func = FALSE;
}
if (window->has_maximize_func)
{
MetaRectangle work_area;
MetaFrameBorders borders;
int min_frame_width, min_frame_height;
meta_window_get_work_area_current_monitor (window, &work_area);
meta_frame_calc_borders (window->frame, &borders);
min_frame_width = window->size_hints.min_width + borders.visible.left + borders.visible.right;
min_frame_height = window->size_hints.min_height + borders.visible.top + borders.visible.bottom;
if (min_frame_width >= work_area.width ||
min_frame_height >= work_area.height)
window->has_maximize_func = FALSE;
}
meta_topic (META_DEBUG_WINDOW_OPS,
"Window %s fullscreen = %d not resizable, maximizable = %d fullscreenable = %d min size %dx%d max size %dx%d\n",
window->desc,
@ -8136,10 +8209,6 @@ menu_callback (MetaWindowMenu *menu,
{
meta_window_change_workspace (window,
workspace);
#if 0
meta_workspace_activate (workspace);
meta_window_raise (window);
#endif
}
}
else
@ -8229,13 +8298,6 @@ meta_window_show_menu (MetaWindow *window,
else
ops |= META_MENU_OP_MAXIMIZE;
#if 0
if (window->shaded)
ops |= META_MENU_OP_UNSHADE;
else
ops |= META_MENU_OP_SHADE;
#endif
if (window->wm_state_above)
ops |= META_MENU_OP_UNABOVE;
else
@ -8264,7 +8326,8 @@ meta_window_show_menu (MetaWindow *window,
if ((window->type == META_WINDOW_DESKTOP) ||
(window->type == META_WINDOW_DOCK) ||
(window->type == META_WINDOW_SPLASHSCREEN))
(window->type == META_WINDOW_SPLASHSCREEN ||
META_WINDOW_MAXIMIZED (window)))
insensitive |= META_MENU_OP_ABOVE | META_MENU_OP_UNABOVE;
/* If all operations are disabled, just quit without showing the menu.
@ -8557,7 +8620,7 @@ update_move (MetaWindow *window,
* refers to the monitor which contains the largest part of the window,
* the latter to the one where the pointer is located.
*/
monitor = meta_screen_get_current_monitor (window->screen);
monitor = meta_screen_get_current_monitor_info (window->screen);
meta_window_get_work_area_for_monitor (window,
monitor->number,
&work_area);
@ -8851,12 +8914,15 @@ update_resize (MetaWindow *window,
dx = x - window->display->grab_anchor_root_x;
dy = y - window->display->grab_anchor_root_y;
/* Attached modal dialogs are special in that horizontal
* size changes apply to both sides, so that the dialog
/* Attached modal dialogs are special in that size
* changes apply to both sides, so that the dialog
* remains centered to the parent.
*/
if (meta_window_is_attached_dialog (window))
dx *= 2;
{
dx *= 2;
dy *= 2;
}
new_w = window->display->grab_anchor_window_pos.width;
new_h = window->display->grab_anchor_window_pos.height;
@ -10251,39 +10317,75 @@ meta_window_get_wm_class_instance (MetaWindow *window)
}
/**
* meta_window_get_dbus_application_id:
* meta_window_get_gtk_application_id:
* @window: a #MetaWindow
*
* Return value: (transfer none): the application ID
**/
const char *
meta_window_get_dbus_application_id (MetaWindow *window)
meta_window_get_gtk_application_id (MetaWindow *window)
{
return window->dbus_application_id;
return window->gtk_application_id;
}
/**
* meta_window_get_dbus_unique_name:
* meta_window_get_gtk_unique_bus_name:
* @window: a #MetaWindow
*
* Return value: (transfer none): the unique name
**/
const char *
meta_window_get_dbus_unique_name (MetaWindow *window)
meta_window_get_gtk_unique_bus_name (MetaWindow *window)
{
return window->dbus_unique_name;
return window->gtk_unique_bus_name;
}
/**
* meta_window_get_dbus_object_path:
* meta_window_get_gtk_application_object_path:
* @window: a #MetaWindow
*
* Return value: (transfer none): the object path
**/
const char *
meta_window_get_dbus_object_path (MetaWindow *window)
meta_window_get_gtk_application_object_path (MetaWindow *window)
{
return window->dbus_object_path;
return window->gtk_application_object_path;
}
/**
* meta_window_get_gtk_window_object_path:
* @window: a #MetaWindow
*
* Return value: (transfer none): the object path
**/
const char *
meta_window_get_gtk_window_object_path (MetaWindow *window)
{
return window->gtk_window_object_path;
}
/**
* meta_window_get_gtk_app_menu_object_path:
* @window: a #MetaWindow
*
* Return value: (transfer none): the object path
**/
const char *
meta_window_get_gtk_app_menu_object_path (MetaWindow *window)
{
return window->gtk_app_menu_object_path;
}
/**
* meta_window_get_gtk_menubar_object_path:
* @window: a #MetaWindow
*
* Return value: (transfer none): the object path
**/
const char *
meta_window_get_gtk_menubar_object_path (MetaWindow *window)
{
return window->gtk_menubar_object_path;
}
/**
@ -10540,7 +10642,8 @@ meta_window_get_frame_type (MetaWindow *window)
return META_FRAME_TYPE_LAST;
}
else if ((window->border_only && base_type != META_FRAME_TYPE_ATTACHED) ||
(window->hide_titlebar_when_maximized && META_WINDOW_MAXIMIZED (window)))
(window->hide_titlebar_when_maximized && META_WINDOW_MAXIMIZED (window)) ||
(window->hide_titlebar_when_maximized && META_WINDOW_TILED_SIDE_BY_SIDE (window)))
{
/* override base frame type */
return META_FRAME_TYPE_BORDER;
@ -10587,3 +10690,99 @@ meta_window_is_attached_dialog (MetaWindow *window)
{
return window->attached;
}
/**
* meta_window_get_tile_match:
*
* Returns the matching tiled window on the same monitor as @window. This is
* the topmost tiled window in a complementary tile mode that is:
*
* - on the same monitor;
* - on the same workspace;
* - spanning the remaining monitor width;
* - there is no 3rd window stacked between both tiled windows that's
* partially visible in the common edge.
*
* Return value: (transfer none) (allow-none): the matching tiled window or
* %NULL if it doesn't exist.
*/
MetaWindow *
meta_window_get_tile_match (MetaWindow *window)
{
return window->tile_match;
}
void
meta_window_compute_tile_match (MetaWindow *window)
{
MetaWindow *match;
MetaStack *stack;
MetaTileMode match_tile_mode = META_TILE_NONE;
window->tile_match = NULL;
if (window->shaded || window->minimized)
return;
if (META_WINDOW_TILED_LEFT (window))
match_tile_mode = META_TILE_RIGHT;
else if (META_WINDOW_TILED_RIGHT (window))
match_tile_mode = META_TILE_LEFT;
else
return;
stack = window->screen->stack;
for (match = meta_stack_get_top (stack);
match;
match = meta_stack_get_below (stack, match, FALSE))
{
if (!match->shaded &&
!match->minimized &&
match->tile_mode == match_tile_mode &&
match->monitor == window->monitor &&
meta_window_get_workspace (match) == meta_window_get_workspace (window))
break;
}
if (match)
{
MetaWindow *above, *bottommost, *topmost;
MetaRectangle above_rect, bottommost_rect, topmost_rect;
if (meta_stack_windows_cmp (window->screen->stack, match, window) > 0)
{
topmost = match;
bottommost = window;
}
else
{
topmost = window;
bottommost = match;
}
meta_window_get_outer_rect (bottommost, &bottommost_rect);
meta_window_get_outer_rect (topmost, &topmost_rect);
/*
* If there's a window stacked in between which is partially visible
* behind the topmost tile we don't consider the tiles to match.
*/
for (above = meta_stack_get_above (stack, bottommost, FALSE);
above && above != topmost;
above = meta_stack_get_above (stack, above, FALSE))
{
if (above->minimized ||
above->monitor != window->monitor ||
meta_window_get_workspace (above) != meta_window_get_workspace (window))
continue;
meta_window_get_outer_rect (above, &above_rect);
if (meta_rectangle_overlap (&above_rect, &bottommost_rect) &&
meta_rectangle_overlap (&above_rect, &topmost_rect))
return;
}
window->tile_match = match;
}
}

View File

@ -42,6 +42,16 @@ struct _MetaWorkspace
MetaScreen *screen;
GList *windows;
/* The "MRU list", or "most recently used" list, is a list of
* MetaWindows ordered based on the time the the user interacted
* with the window most recently.
*
* For historical reasons, we keep an MRU list per workspace.
* It used to be used to calculate the default focused window,
* but isn't anymore, as the window next in the stacking order
* can sometimes be not the window the user interacted with last,
*/
GList *mru_list;
GList *list_containing_self;
@ -88,9 +98,6 @@ void meta_workspace_focus_default_window (MetaWorkspace *workspace,
MetaWindow *not_this_one,
guint32 timestamp);
MetaWorkspace* meta_workspace_get_neighbor (MetaWorkspace *workspace,
MetaMotionDirection direction);
const char* meta_workspace_get_name (MetaWorkspace *workspace);
#endif

View File

@ -46,7 +46,7 @@ enum {
};
void meta_workspace_queue_calc_showing (MetaWorkspace *workspace);
static void focus_ancestor_or_mru_window (MetaWorkspace *workspace,
static void focus_ancestor_or_top_window (MetaWorkspace *workspace,
MetaWindow *not_this_one,
guint32 timestamp);
static void free_this (gpointer candidate,
@ -192,7 +192,7 @@ meta_workspace_new (MetaScreen *screen)
return workspace;
}
/** Foreach function for workspace_free_struts() */
/* Foreach function for workspace_free_struts() */
static void
free_this (gpointer candidate, gpointer dummy)
{
@ -200,9 +200,10 @@ free_this (gpointer candidate, gpointer dummy)
}
/**
* Frees the combined struts list of a workspace.
* workspace_free_all_struts:
* @workspace: The workspace.
*
* \param workspace The workspace.
* Frees the combined struts list of a workspace.
*/
static void
workspace_free_all_struts (MetaWorkspace *workspace)
@ -216,9 +217,10 @@ workspace_free_all_struts (MetaWorkspace *workspace)
}
/**
* Frees the struts list set with meta_workspace_set_builtin_struts
* workspace_free_builtin_struts:
* @workspace: The workspace.
*
* \param workspace The workspace.
* Frees the struts list set with meta_workspace_set_builtin_struts
*/
static void
workspace_free_builtin_struts (MetaWorkspace *workspace)
@ -997,18 +999,6 @@ ensure_work_areas_validated (MetaWorkspace *workspace)
/* We're all done, YAAY! Record that everything has been validated. */
workspace->work_areas_invalid = FALSE;
{
/*
* Notify the compositor that the workspace geometry has changed.
*/
MetaScreen *screen = workspace->screen;
MetaDisplay *display = meta_screen_get_display (screen);
MetaCompositor *comp = meta_display_get_compositor (display);
if (comp)
meta_compositor_update_workspace_geometry (comp, workspace);
}
}
static gboolean
@ -1066,6 +1056,13 @@ meta_workspace_get_work_area_for_monitor (MetaWorkspace *workspace,
*area = workspace->work_area_monitor[which_monitor];
}
/**
* meta_workspace_get_work_area_all_monitors:
* @workspace: a #MetaWorkspace
* @area: (out): location to store the work area
*
* Stores the work area in @area.
*/
void
meta_workspace_get_work_area_all_monitors (MetaWorkspace *workspace,
MetaRectangle *area)
@ -1120,6 +1117,18 @@ meta_motion_direction_to_string (MetaMotionDirection direction)
}
#endif /* WITH_VERBOSE_MODE */
/**
* meta_workspace_get_neighbor:
* @workspace: a #MetaWorkspace
* @direction: a #MetaMotionDirection, relative to @workspace
*
* Calculate and retrive the workspace that is next to @workspace,
* according to @direction and the current workspace layout, as set
* by meta_screen_override_workspace_layout().
*
* Returns: (transfer none): the workspace next to @workspace, or
* @workspace itself if the neighbor would be outside the layout
*/
MetaWorkspace*
meta_workspace_get_neighbor (MetaWorkspace *workspace,
MetaMotionDirection direction)
@ -1201,7 +1210,7 @@ meta_workspace_focus_default_window (MetaWorkspace *workspace,
if (meta_prefs_get_focus_mode () == G_DESKTOP_FOCUS_MODE_CLICK ||
!workspace->screen->display->mouse_mode)
focus_ancestor_or_mru_window (workspace, not_this_one, timestamp);
focus_ancestor_or_top_window (workspace, not_this_one, timestamp);
else
{
MetaWindow * window;
@ -1238,7 +1247,7 @@ meta_workspace_focus_default_window (MetaWorkspace *workspace,
}
}
else if (meta_prefs_get_focus_mode () == G_DESKTOP_FOCUS_MODE_SLOPPY)
focus_ancestor_or_mru_window (workspace, not_this_one, timestamp);
focus_ancestor_or_top_window (workspace, not_this_one, timestamp);
else if (meta_prefs_get_focus_mode () == G_DESKTOP_FOCUS_MODE_MOUSE)
{
meta_topic (META_DEBUG_FOCUS,
@ -1261,17 +1270,13 @@ record_ancestor (MetaWindow *window,
return FALSE; /* quit with the first ancestor we find */
}
/* Focus ancestor of not_this_one if there is one, otherwise focus the MRU
* window on active workspace
*/
/* Focus ancestor of not_this_one if there is one */
static void
focus_ancestor_or_mru_window (MetaWorkspace *workspace,
focus_ancestor_or_top_window (MetaWorkspace *workspace,
MetaWindow *not_this_one,
guint32 timestamp)
{
MetaWindow *window = NULL;
MetaWindow *desktop_window = NULL;
GList *tmp;
if (not_this_one)
meta_topic (META_DEBUG_FOCUS,
@ -1305,36 +1310,9 @@ focus_ancestor_or_mru_window (MetaWorkspace *workspace,
}
}
/* No ancestor, look for the MRU window */
tmp = workspace->mru_list;
while (tmp)
{
MetaWindow* tmp_window;
tmp_window = ((MetaWindow*) tmp->data);
if (tmp_window != not_this_one &&
meta_window_showing_on_its_workspace (tmp_window) &&
tmp_window->type != META_WINDOW_DOCK &&
tmp_window->type != META_WINDOW_DESKTOP)
{
window = tmp->data;
break;
}
else if (tmp_window != not_this_one &&
desktop_window == NULL &&
meta_window_showing_on_its_workspace (tmp_window) &&
tmp_window->type == META_WINDOW_DESKTOP)
{
/* Found the most recently used desktop window */
desktop_window = tmp_window;
}
tmp = tmp->next;
}
/* If no window was found, default to the MRU desktop-window */
if (window == NULL)
window = desktop_window;
window = meta_stack_get_default_focus_window (workspace->screen->stack,
workspace,
not_this_one);
if (window)
{

View File

@ -60,9 +60,12 @@ item(_MUTTER_TOGGLE_VERBOSE)
item(_MUTTER_HINTS)
item(_GTK_THEME_VARIANT)
item(_GTK_HIDE_TITLEBAR_WHEN_MAXIMIZED)
item(_DBUS_APPLICATION_ID)
item(_DBUS_UNIQUE_NAME)
item(_DBUS_OBJECT_PATH)
item(_GTK_APPLICATION_ID)
item(_GTK_UNIQUE_BUS_NAME)
item(_GTK_APPLICATION_OBJECT_PATH)
item(_GTK_WINDOW_OBJECT_PATH)
item(_GTK_APP_MENU_OBJECT_PATH)
item(_GTK_MENUBAR_OBJECT_PATH)
item(_GNOME_WM_KEYBINDINGS)
item(_GNOME_PANEL_ACTION)
item(_GNOME_PANEL_ACTION_MAIN_MENU)

View File

@ -364,6 +364,7 @@ void meta_frame_borders_clear (MetaFrameBorders *self);
(ycoord) < ((rect).y + (rect).height))
/**
* MetaStackLayer:
* Layers a window can be in.
* These MUST be in the order of stacking.
*/

View File

@ -27,6 +27,7 @@
#include <clutter/clutter.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xfixes.h>
#include <meta/types.h>
#include <meta/compositor.h>
@ -43,5 +44,8 @@ void meta_disable_unredirect_for_screen (MetaScreen *screen);
void meta_enable_unredirect_for_screen (MetaScreen *screen);
ClutterActor *meta_get_background_actor_for_screen (MetaScreen *screen);
void meta_set_stage_input_region (MetaScreen *screen,
XserverRegion region);
void meta_empty_stage_input_region (MetaScreen *screen);
#endif

View File

@ -153,8 +153,6 @@ void meta_compositor_set_updates (MetaCompositor *compositor,
MetaWindow *window,
gboolean updates);
void meta_compositor_update_workspace_geometry (MetaCompositor *compositor,
MetaWorkspace *workspace);
void meta_compositor_sync_stack (MetaCompositor *compositor,
MetaScreen *screen,
GList *stack);

View File

@ -33,7 +33,8 @@ typedef enum
{
META_TAB_LIST_NORMAL,
META_TAB_LIST_DOCKS,
META_TAB_LIST_GROUP
META_TAB_LIST_GROUP,
META_TAB_LIST_NORMAL_ALL
} MetaTabList;
typedef enum
@ -91,6 +92,8 @@ guint32 meta_display_get_last_user_time (MetaDisplay *display);
guint32 meta_display_get_current_time (MetaDisplay *display);
guint32 meta_display_get_current_time_roundtrip (MetaDisplay *display);
unsigned int meta_display_get_ignored_modifier_mask (MetaDisplay *display);
GList* meta_display_get_tab_list (MetaDisplay *display,
MetaTabList type,
MetaScreen *screen,
@ -126,7 +129,7 @@ MetaGrabOp meta_display_get_grab_op (MetaDisplay *display);
gboolean meta_display_add_keybinding (MetaDisplay *display,
const char *name,
const char *schema,
GSettings *settings,
MetaKeyBindingFlags flags,
MetaKeyHandlerFunc handler,
gpointer user_data,
@ -172,4 +175,6 @@ void meta_display_unmanage_screen (MetaDisplay *display,
MetaScreen *screen,
guint32 timestamp);
void meta_display_clear_mouse_mode (MetaDisplay *display);
#endif

View File

@ -123,8 +123,6 @@ struct _MetaPluginInfo
GType meta_plugin_get_type (void);
gulong meta_plugin_features (MetaPlugin *plugin);
gboolean meta_plugin_disabled (MetaPlugin *plugin);
gboolean meta_plugin_running (MetaPlugin *plugin);
gboolean meta_plugin_debug_mode (MetaPlugin *plugin);
@ -220,9 +218,6 @@ struct _MetaPluginVersion
return object_name##_register_type (type_module); \
} \
void
meta_plugin_type_register (GType plugin_type);
void
meta_plugin_switch_workspace_completed (MetaPlugin *plugin);
@ -246,35 +241,6 @@ void
meta_plugin_destroy_completed (MetaPlugin *plugin,
MetaWindowActor *actor);
ClutterActor *
meta_plugin_get_overlay_group (MetaPlugin *plugin);
ClutterActor *
meta_plugin_get_window_group (MetaPlugin *plugin);
ClutterActor *
meta_plugin_get_background_actor (MetaPlugin *plugin);
ClutterActor *
meta_plugin_get_stage (MetaPlugin *plugin);
void
meta_plugin_query_screen_size (MetaPlugin *plugin,
int *width,
int *height);
void
meta_plugin_set_stage_reactive (MetaPlugin *plugin,
gboolean reactive);
void
meta_plugin_set_stage_input_area (MetaPlugin *plugin,
gint x, gint y, gint width, gint height);
void
meta_plugin_set_stage_input_region (MetaPlugin *plugin,
XserverRegion region);
/**
* MetaModalOptions:
* @META_MODAL_POINTER_ALREADY_GRABBED: if set the pointer is already
@ -300,11 +266,12 @@ void
meta_plugin_end_modal (MetaPlugin *plugin,
guint32 timestamp);
GList * meta_plugin_get_window_actors (MetaPlugin *plugin);
Display * meta_plugin_get_xdisplay (MetaPlugin *plugin);
MetaScreen *meta_plugin_get_screen (MetaPlugin *plugin);
void
_meta_plugin_effect_started (MetaPlugin *plugin);
/* XXX: Putting this in here so it's in the public header. */
void meta_plugin_manager_set_plugin_type (GType gtype);
#endif /* META_PLUGIN_H_ */

View File

@ -26,10 +26,8 @@
#ifndef __META_SHAPED_TEXTURE_H__
#define __META_SHAPED_TEXTURE_H__
#include <config.h>
#include <clutter/clutter.h>
#include <clutter/x11/clutter-x11.h>
#include <X11/Xlib.h>
G_BEGIN_DECLS
@ -46,12 +44,12 @@ typedef struct _MetaShapedTexturePrivate MetaShapedTexturePrivate;
struct _MetaShapedTextureClass
{
ClutterX11TexturePixmapClass parent_class;
ClutterActorClass parent_class;
};
struct _MetaShapedTexture
{
ClutterX11TexturePixmap parent;
ClutterActor parent;
MetaShapedTexturePrivate *priv;
};
@ -63,21 +61,27 @@ ClutterActor *meta_shaped_texture_new (void);
void meta_shaped_texture_set_create_mipmaps (MetaShapedTexture *stex,
gboolean create_mipmaps);
void meta_shaped_texture_clear (MetaShapedTexture *stex);
void meta_shaped_texture_update_area (MetaShapedTexture *stex,
int x,
int y,
int width,
int height);
void meta_shaped_texture_set_shape_region (MetaShapedTexture *stex,
cairo_region_t *region);
void meta_shaped_texture_set_pixmap (MetaShapedTexture *stex,
Pixmap pixmap);
cairo_region_t *meta_shaped_texture_get_visible_pixels_region (MetaShapedTexture *stex);
CoglHandle meta_shaped_texture_get_texture (MetaShapedTexture *stex);
void meta_shaped_texture_set_overlay_path (MetaShapedTexture *stex,
cairo_region_t *overlay_region,
cairo_path_t *overlay_path);
void meta_shaped_texture_set_mask_texture (MetaShapedTexture *stex,
CoglHandle mask_texture);
/* Assumes ownership of clip_region */
void meta_shaped_texture_set_clip_region (MetaShapedTexture *stex,
cairo_region_t *clip_region);
cairo_surface_t * meta_shaped_texture_get_image (MetaShapedTexture *stex,
cairo_rectangle_int_t *clip);
G_END_DECLS
#endif /* __META_SHAPED_TEXTURE_H__ */

View File

@ -30,6 +30,7 @@
#include <meta/types.h>
#include <pango/pango-font.h>
#include <gdesktop-enums.h>
#include <gio/gio.h>
/* Keep in sync with GSettings schemas! */
typedef enum
@ -47,6 +48,7 @@ typedef enum
META_PREF_THEME,
META_PREF_TITLEBAR_FONT,
META_PREF_NUM_WORKSPACES,
META_PREF_DYNAMIC_WORKSPACES,
META_PREF_APPLICATION_BASED,
META_PREF_KEYBINDINGS,
META_PREF_DISABLE_WORKAROUNDS,
@ -62,7 +64,6 @@ typedef enum
META_PREF_RESIZE_WITH_RIGHT_BUTTON,
META_PREF_EDGE_TILING,
META_PREF_FORCE_FULLSCREEN,
META_PREF_LIVE_HIDDEN_WINDOWS,
META_PREF_WORKSPACES_ONLY_ON_PRIMARY,
META_PREF_NO_TAB_POPUP,
META_PREF_DRAGGABLE_BORDER_WIDTH
@ -94,6 +95,7 @@ const char* meta_prefs_get_theme (void);
/* returns NULL if GTK default should be used */
const PangoFontDescription* meta_prefs_get_titlebar_font (void);
int meta_prefs_get_num_workspaces (void);
gboolean meta_prefs_get_dynamic_workspaces (void);
gboolean meta_prefs_get_application_based (void);
gboolean meta_prefs_get_disable_workarounds (void);
gboolean meta_prefs_get_auto_raise (void);
@ -102,12 +104,6 @@ gboolean meta_prefs_get_gnome_accessibility (void);
gboolean meta_prefs_get_gnome_animations (void);
gboolean meta_prefs_get_edge_tiling (void);
const char* meta_prefs_get_screenshot_command (void);
const char* meta_prefs_get_window_screenshot_command (void);
const char* meta_prefs_get_terminal_command (void);
void meta_prefs_get_button_layout (MetaButtonLayout *button_layout);
/* Double, right, middle click can be configured to any titlebar meta-action */
@ -126,18 +122,8 @@ int meta_prefs_get_cursor_size (void);
gboolean meta_prefs_get_compositing_manager (void);
gboolean meta_prefs_get_force_fullscreen (void);
/**
* Sets whether the compositor is turned on.
*
* \param whether TRUE to turn on, FALSE to turn off
*/
void meta_prefs_set_compositing_manager (gboolean whether);
void meta_prefs_set_force_fullscreen (gboolean whether);
gboolean meta_prefs_get_live_hidden_windows (void);
void meta_prefs_set_live_hidden_windows (gboolean whether);
gboolean meta_prefs_get_workspaces_only_on_primary (void);
gboolean meta_prefs_get_no_tab_popup (void);
@ -145,6 +131,9 @@ void meta_prefs_set_no_tab_popup (gboolean whether);
int meta_prefs_get_draggable_border_width (void);
gboolean meta_prefs_get_ignore_request_hide_titlebar (void);
void meta_prefs_set_ignore_request_hide_titlebar (gboolean whether);
/* XXX FIXME This should be x-macroed, but isn't yet because it would be
* difficult (or perhaps impossible) to add the suffixes using the current
* system. It needs some more thought, perhaps after the current system
@ -269,11 +258,11 @@ typedef struct _MetaKeyHandler MetaKeyHandler;
typedef struct
{
char *name;
char *schema;
GSettings *settings;
MetaKeyBindingAction action;
/**
/*
* A list of MetaKeyCombos. Each of them is bound to
* this keypref. If one has keysym==modifiers==0, it is
* ignored.

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