Commit Graph

58 Commits

Author SHA1 Message Date
Owen W. Taylor
d042dba4d6 Add meta_display_get_grab_op()
Add a function to determine the current grab op. This can be useful
in a plugin to avoid over-grabbing an X grab held by Mutter.

http://bugzilla.gnome.org/show_bug.cgi?id=593399
2009-08-28 12:27:46 -04:00
Owen W. Taylor
67682a2683 Add a modal mode for plugins
mutter_plugin_begin_modal() and mutter_plugin_begin_modal() allow putting
a plugin into a "modal" state. This means:

 - The plugin has the keyboard and mouse grabbed
 - All keyboard and mouse events go exclusively to the plugin

mutter-plugin.[ch]: Add public API
compositor.c compositor-private.h: Implement the API
mutter-plugin-manager.c: When reloading plugins, make sure none of them
  are modal at that moment, and if so force-unmodal them.
common.h: Add META_GRAB_OP_COMPOSITOR
display: When display->grab_op is META_GRAB_OP_COMPOSITOR forward relevant
  events exclusively to the compositor.

http://bugzilla.gnome.org/show_bug.cgi?id=590754
2009-08-26 12:26:58 -04:00
Owen W. Taylor
b1776b5ae5 Enforce a policy of single-handling of key events
Only process each key event once. If all keys are grabbed, then
don't also look for handlers for a key shortcut after processing
the grab op. If all keys are grabbed or we find a key shortcut,
don't pass the event on to the compositing mananger.

http://bugzilla.gnome.org/show_bug.cgi?id=590754
2009-08-26 12:26:58 -04:00
Thomas James Alexander Thurman
7a6968cb46 Only skip the first window in the alt-tab chain if it's actually the
* src/core/display.c: Only skip the first window in
        the alt-tab chain if it's actually the current window
        (urgent windows on other workspaces may precede it).
        Fixes #535887.

http://bugzilla.gnome.org/show_bug.cgi?id=591913

(Metacity commit 92bfe34716)
2009-08-26 15:29:09 +01:00
Owen W. Taylor
d58c9a57c6 Avoid accessing freed memory when being replaced
If we are replaced via the window manager selection, then we close
the MetaDisplay before meta_finalize() runs. We should be careful
not to try to close the display again (and access already freed
memory) in that case, so clear the global 'the_display' variable.

See Metacity bug http://bugzilla.gnome.org/show_bug.cgi?id=588119

http://bugzilla.gnome.org/show_bug.cgi?id=592742
2009-08-24 14:29:16 -04:00
Colin Walters
9cc70a3fb6 Make meta_display_xwindow_is_a_no_focus_window public
Useful for window analysis in plugins.
2009-08-20 14:20:01 -04:00
Colin Walters
df90187e06 Add focus-window property to MetaDisplay
Useful mainly for notify::focus-window.
2009-08-01 04:38:26 -04:00
Owen W. Taylor
239b39cf52 Pass through all scroll events to compositor
As with other events, we want to pass through scroll events (button 4/5 presses)
to the compositor, whether or not they are associated with a particular MetaWindow;
do this by simply falling through to the normal code path instead of
separately delivering the events to the compositor.

http://bugzilla.gnome.org/show_bug.cgi?id=588232
2009-07-31 10:37:26 -04:00
Jon Nettleton
94f64797de Remove wireframe mode and old effects framework
Remove the reduced_resources preference and all all wireframe logic and effects.

http://bugzilla.gnome.org/show_bug.cgi?id=581812
2009-06-30 09:35:12 -04:00
Owen W. Taylor
d69546902b Remove unused MetaCompositor functions
Remove a number of functions that were either entirely unimplemented
or had empty implementations for the Clutter-compositor.

 meta_compositor_begin_move()
 meta_compositor_update_move()
 meta_compositor_end_move()
 meta_compositor_set_active_window()
 meta_compositor_free_window()

http://bugzilla.gnome.org/show_bug.cgi?id=581813
2009-06-30 09:35:12 -04:00
Jon Nettleton
0b8a57bcba There can be only one compositor engine
Mutter is a Clutter-based compositing manager. So, remove the code for
the XRender-based compositor, and make it mandatory to have XComposite,
XRender and Clutter.

Run-time support for non-composited operation is left for now.

* src/compositor/mutter/: Move files from this subdirectory into
  the main compositor/ directory.

* compositor/compositor-xrender.ccompositor/compositor-xrender.h:
  Remove

* include/compositor-clutter.h: Remove this stray file, it had been
  replaced with compositor-mutter.h some time back.

http://bugzilla.gnome.org/show_bug.cgi?id=581813
2009-06-30 09:34:03 -04:00
Owen W. Taylor
a4cd66f599 Add better tracking of real stacking order
Wedging override-redirect windows into the constraint code in stack.c
results in Mutter getting confused about the stacking order of
these windows with respect to other windows, and may also in some
cases cause Mutter to restack override-redirect windows.

core/stack-tracker.c core/stack-tracker.h: MetaStackTracker - combine
  events received from the X server with local changes we have made
  to come up with the best possible idea of what the stacking order
  is at any one point in time.

core/screen.c core/screen-private.h: Create a MetaStackTracker for
  the screen.

core/display.c: Feed relevant events to MetaStackTracker

core/frame.c core/screen.c core/stack.c: When we make changes to the
  stacking order or add windows, record those changes immediatley
  in MetaStackTracker so we have the information without waiting
  for a round-trip.

include/ui.h ui/ui.c: meta_ui_create_frame_window add a return value
  for the X request serial used to create the window.

http://bugzilla.gnome.org/show_bug.cgi?id=585984
2009-06-29 23:04:59 -04:00
Owen W. Taylor
00d955eb40 meta_display_list_windows: Exclude override-redirect
Don't include override-redirect windows in the list return by
meta_display_list_windows(), since we almost never want to handle
them when considering "all window" for the display. Add a separate
meta_display_list_all_windows() that includes override-redirect
windows.

http://bugzilla.gnome.org/show_bug.cgi?id=582639
2009-06-29 22:51:32 -04:00
Jon Nettleton
51a6467968 Comprehensively rename to Mutter
Code:
All references in the code not related to themes, keybindings, or
GConf were changed from 'metacity' to 'mutter'. This includes, among other
things, strings, comments, the atoms used in the message protocol, and
the envvars used for debugging. The GConf schema file was reduced to
the 3 settings new to mutter.

The overall version was brought up to 2.27 to match current gnome.

Structure:
All files named '*metacity*' were renamed '*mutter*' with appropriate
changes in the automake system.  Files removed are
doc/creating_themes, src/themes, doc/metacity-theme.dtd,
metacity.doap.  These files will eventually end up in an external
gnome-wm-data module.

Installation location:
On the filesystem the mutter-plugindir was change from
$(libdir)/metacity/plugins/clutter to just $(libdir)/mutter/plugins.
The mutter-plugins.pc.in reflects these changes.

Note:
mutter.desktop.in and mutter-wm.desktop both continue to have
X-GNOME-WMSettingsModule=metacity set.  This allows
gnome-control-center to continue using libmetacity.so for
configuration.  This is fine since most the general keybindings and wm
settings are being read from /apps/metacity/* in gconf.
2009-06-16 14:17:10 -04:00
Tomas Frydrych
90c35f8181 Allow the compositor to see ButtonPress events for buttons 4 or 5 2009-05-05 09:46:36 +01:00
Dan Winship
99d0f41d98 Push the tab/workspace popup abstraction completely into screen.c
Also, use MetaWindows as the tab_popup keys rather than using (X) Windows
and then having to map back and forth everywhere, which is silly since
we never actually want the X Window.

http://bugzilla.gnome.org/show_bug.cgi?id=580917
2009-05-04 10:25:58 -04:00
Dan Winship
cbf4be04fc Reorganize tab popup code a bit more cleanly.
Rather than trying to reverse-engineer what kind of tab/workspace
popup to create from within meta_display_begin_grab_op(), just create
the popup directly from do_choose_window()/handle_workspace_switch()
after completing the grab, since they already know which kind they
want.

Also add meta_screen_destroy_tab_popup()/_destroy_workspace_popup()
rather than having meta_display_end_grab_op() poke into MetaScreen's
internals itself.

http://bugzilla.gnome.org/show_bug.cgi?id=580917
2009-05-04 10:25:58 -04:00
Colin Walters
514d00698d Add support for a "meta key" which initiates extended WM operations
This patch adds the concept of a special key for WM operations, and
the default is Super_L, which on extended PC hardware is the
"Windows key".  What we do is handle the special case of a press
and release of this key (without any other intervening keys).

Super_L+<key> should still be passed to applications.  In the future
we may want to also take some of these keybindings (e.g. Super+TAB)
though.

http://bugzilla.gnome.org/show_bug.cgi?id=563047
2009-04-24 09:54:18 -04:00
Owen W. Taylor
c4a4de0056 Fix return transfer annotations for a number of functions and add docs
Add return transfer annotations (and while I was at it, docs), for
public functions that return MetaDisplay, MetaWindow, and MetaScreen.

http://bugzilla.gnome.org/show_bug.cgi?id=561297

http://bugzilla.gnome.org/show_bug.cgi?id=580027
2009-04-24 09:54:17 -04:00
Tomas Frydrych
39a3bb2c7d Sync up to upstream 2.25.144
Conflicts:

	configure.in
	src/core/main.c
	src/core/prefs.c
	src/core/window.c
	src/include/prefs.h
2009-02-12 17:14:12 +00:00
Thomas James Alexander Thurman
0a172cc053 Added a gconf key to swap the meanings of the right and
middle buttons when the modifier key is held down.
        Closes #437910.  Thanks to Matt Kraai for looking over
        the patch.
	* src/core/display.c:
	* src/core/prefs.c:
	* src/include/prefs.h:
	* src/metacity.schemas.in.in:


svn path=/trunk/; revision=4091
2009-01-27 21:05:42 +00:00
Tomas Frydrych
9dee164790 Ensure that we do not attempt to free the tab popup when there is none. 2009-02-03 13:16:01 +00:00
Tomas Frydrych
c3884e9900 Can't g_free() MetaDisplay GObject. 2009-02-03 09:11:32 +00:00
Tomas Frydrych
813acae961 Rename keybindings.h to keybindings-private.h 2009-01-29 14:16:01 +00:00
Thomas James Alexander Thurman
41b6f0803e remove apparently spurious warnings about operations on window "none"
* src/core/display.c: remove apparently spurious warnings about
	operations on window "none"


svn path=/trunk/; revision=4026
2008-11-23 18:53:55 +00:00
Owen W. Taylor
e083742426 Filter out events handled before the plugin before they get GTK+
Fix a problem where GTK+ was warning
'gdk_window_set_user_time called on non-toplevel' for every button
press and click on the mutter stage by excluding such events from
GTK+ processing.

Add a boolean return value to meta_compositor_process_event that
indicates whether the event has been handled and should be filtered
out of the event stream and for mutter, base that on the return
value of the plugin's xevent_filter vfunc.
2008-11-22 13:07:32 -05:00
Tomas Frydrych
b7466365a1 Removed unused variable. 2008-12-18 12:46:39 +00:00
Tomas Frydrych
3b3226b678 Merge branch 'plugin-gobject' into next-generation
Conflicts:

	src/compositor/mutter/compositor-mutter.c
	src/core/window.c
2008-12-18 12:41:56 +00:00
Tomas Frydrych
0214ece238 Merge commit 'clutter/override-redirect-core-1' into next-generation 2008-12-18 12:28:01 +00:00
Tomas Frydrych
9821453b5f Merge branch 'upstream-2.25.55' into next-generation
Conflicts:

	configure.in
	src/Makefile.am
	src/core/screen-bindings.h
	src/metacity.schemas.in
2008-12-18 11:00:19 +00:00
Colin Walters
8c3bcc7229 Make MetaDisplay a real GObject
We need this to be able to add signals, among other things.

http://bugzilla.gnome.org/show_bug.cgi?id=563047
2008-12-02 17:58:07 -05:00
Robert Bragg
6849735e9d Adds support in src/core for tracking override redirect windows.
The metacity core is now directly aware of override redirect windows.
- They get MetaWindows like normal windows, so mutter no longer need to special
  case them. The net wm types applicable to override redirects are also
  recognised.
- The original positioning/stacking semantics of metacity with respect to OR
  windows are maintained, but now it's easier to synchronize the stacking
  between the core and mutter.
- mutter no longer needs to manualy track UnmapNotify, MapNotify,
  ReparentNotify, CreateNotify and DestroyNotify events; instead map, unmap,
  add and remove events can now be consistently delivered via the
  MetaCompositor callbacks.
2008-11-23 19:28:40 +00:00
Owen W. Taylor
9a1be03205 Make MetaWindow a GObject
Make MetaWindow into a GObject so that it is accessible to
gobject-introspection (also allows for signals to be added.)

Renames:

 meta_window_free() => meta_window_unmanage()
 meta_window_get_type() => meta_window_get_window_type()
 meta_window_get_type_atom() => meta_window_get_window_type_atom()
2008-11-07 04:57:00 -05:00
Robert Bragg
f65d898f80 Merge branch 'master' into bob/clutter
Conflicts:

	src/core/prefs.c
	src/include/prefs.h
2008-10-06 12:54:34 +01:00
William Lachance
a49f986c67 Pass modified mouse button events down to panel windows instead of dealing
2008-10-06  William Lachance  <wrlach@gmail.com>

        Pass modified mouse button events down to panel windows
        instead of dealing with them ourselves.  Closes #554428.

        * src/core/display.c (prefs_changed_callback): don't grab mouse
          buttons on panels
        * src/core/window.c (meta_window_new_with_attrs): ditto


svn path=/trunk/; revision=3942
2008-10-06 01:34:17 +00:00
Tomas Frydrych
9b3a0d1ad8 Basic plugin infastructure and a sample simple plugin. 2008-09-18 16:09:11 +01:00
Tomas Frydrych
f7f696c310 Moved atomnames.h to includes so can be included from display.h.
meta_display_get_atom: allow common atom retrieval via enum (to avoid interning
identical atoms at different places).
2008-08-18 15:10:13 +01:00
Tomas Frydrych
e1965914a3 Synced with Metacity 2.23.89 (r3800)
Merge commit '51de9ef8605f7a195ef360afb3a504488125611f' into clutter
2008-08-18 11:11:32 +01:00
Thomas Thurman
34fe81fabd meta_display_screen_for_root() can return NULL, so check for that. Fixes
2008-07-13  Thomas Thurman  <tthurman@gnome.org>

        * src/core/display.c (event_callback): meta_display_screen_for_root()
        can return NULL, so check for that.  Fixes #422242.  Also tidying.

svn path=/trunk/; revision=3788
2008-07-14 00:41:25 +00:00
Thomas Thurman
b3549979c6 add checks for HAVE_SHAPE where appropriate. fix type error which was
2008-06-28  Thomas Thurman  <tthurman@gnome.org>

        * src/core/display.c, src/compositor/compositor-xrender.c: add checks
          for HAVE_SHAPE where appropriate.
        * src/core/xprops.c: fix type error which was causing warnings.


svn path=/trunk/; revision=3772
2008-06-29 03:23:08 +00:00
Matthew Allum
c29232fd0d Misc cleanups, removal of stray printf's etc. Add basic win opacity handling 2008-06-04 20:51:08 +01:00
Thomas Thurman
a8c5c002fb make sure compositor things don't get compiled when we're not using the
2008-06-02  Thomas Thurman  <tthurman@gnome.org>

        * src/core/display.c: make sure compositor things don't get
        compiled when we're not using the compositor.


svn path=/trunk/; revision=3748
2008-06-02 22:27:54 +00:00
Iain Holmes
f141692ca2 src/include/frame.h src/include/display.h src/include/xprops.h
2008-05-19  Iain Holmes  <iain@gnome.org>

        * src/include/frame.h
        * src/include/display.h
        * src/include/xprops.h
        * src/include/compositor.h
        * src/include/types.h
        * src/include/window.h
        * src/include/errors.h
        * src/include/screen.h: New basic public API for compositor.

        * src/compositor/*: Separate the compositor out into its own 
separate
        directory and set it up for backends. Initial XRender backend.

        * src/core/compositor.[ch]: Remove

        * src/core/frame.h
        * src/core/screen.h
        * src/core/display.h
        * src/core/window.h: Rename to -private.h so as not to clash 
with the
        new files in include

        * src/core/delete.c
        * src/core/workspace.h
        * src/core/stack.[ch]
        * src/core/keybindings.[ch]
        * src/core/errors.c
        * src/core/effects.[ch]
        * src/core/core.c
        * src/core/group.h
        * src/core/edge-resistance.[ch]
        * src/core/window-props.[ch]
        * src/core/constraints.h
        * src/core/bell.[ch]
        * src/core/iconcache.h
        * src/core/session.[ch]
        * src/core/main.c
        * src/core/place.h
        * src/core/xprops.c
        * src/ui/tabpopup.c: Use the new -private headers

        * src/core/display.c
        * src/core/frame.c
        * src/core/window.c
        * src/core/screen.c: Add the API functions required by the 
compositor

        * src/Makefile.am: Relocate the new files



svn path=/trunk/; revision=3715
2008-05-19 00:00:09 +00:00
Thomas Thurman
b455ac62d2 All information should live in exactly one place. This means that the list
2008-05-02  Thomas Thurman  <tthurman@gnome.org>

        All information should live in exactly one place.  This means
        that the list of atoms should not be replicated anywhere.
        Therefore, we include it via x-macros.  Closes #530843.

        * src/core/atomnames.h: added list of atom names
        * src/Makefile.am: added reference to new file
        * src/core/display.h
        * src/core/display.c (twice)
        * src/core/screen.c: #included atomnames.h instead of having
          an enormous list of atoms
        * src/core/group-props.c
        * src/core/window.c
        * src/core/compositor.c
        * src/core/window-props.c
        * src/core/delete.c
        * src/core/workspace.c
        * src/core/stack.c
        * src/core/keybindings.c
        * src/core/iconcache.c
        * src/core/group.c
        * src/core/xprops.c: changed to new, simpler identifiers
          for atoms


svn path=/trunk/; revision=3702
2008-05-02 18:49:01 +00:00
Thomas Thurman
f3e64f181d fix regression where Metacity sometimes wouldn't quit when replaced
2008-03-27  Thomas Thurman  <tthurman@gnome.org>

        * src/core/display.c (meta_display_close): fix regression
        where Metacity sometimes wouldn't quit when replaced


svn path=/trunk/; revision=3665
2008-03-27 12:32:50 +00:00
Thomas Thurman
0130c0d5b6 meta_display_screen_for_root is quite capable of returning NULL.
2008-03-26  Thomas Thurman  <tthurman@gnome.org>

        * src/core/display.c (event_callback): meta_display_screen_for_root
        is quite capable of returning NULL.


svn path=/trunk/; revision=3664
2008-03-26 13:32:58 +00:00
Thomas Thurman
1e325bcbdf MetaDisplay becomes a singleton. The static variable which holds this
2008-03-25  Thomas Thurman  <tthurman@gnome.org>

        * src/core/display.c (meta_display_queue_retheme_all_windows,
        meta_set_syncing, meta_display_set_cursor_theme, disable_compositor,
        meta_display_for_x_display, meta_display_open, meta_display_close,
        meta_display_ungrab): MetaDisplay becomes a singleton.  The static
        variable which holds this singleton is renamed "the_display" so as
        not to mask the this parameter in the methods.

        * src/core/main.c (main):
        * src/core/session.c (warn_about_lame_clients_and_finish_inte,
        save_state, io_from_warning_dialog):
        * src/core/core.c (meta_core_increment_event_serial):
        * src/core/delete.c (release_window_with_fd, search_and_destroy_window):
        sympathy changes for this, and consequent simplification.
        Closes #499301.


svn path=/trunk/; revision=3663
2008-03-25 03:39:13 +00:00
Jim Huang
04956ecf18 fixups to allow compilation in non-verbose mode. Closes #515152.
2008-02-14  Jim Huang  <jserv.tw@gmail.com>                                                                      
                                                                                                                 
        * src/core/display.c, src/core/util.c: fixups to allow                                                   
        compilation in non-verbose mode. Closes #515152.   

svn path=/trunk/; revision=3569
2008-02-15 04:37:39 +00:00
Michael Meeks
2f43d436c8 src/core/display.c (meta_display_open), fetch & use composite version, for
2008-01-28  Michael Meeks  <michael.meeks@novell.com>

        * src/core/display.c (meta_display_open),
        * src/core/compositor.c: fetch & use composite
        version, for remote screens that don't match the
        compile system's version.
        (meta_compositor_manage_screen): bin erroneous FIXME.
        (add_win): remove common warning churn for (very)
        transient windows


svn path=/trunk/; revision=3550
2008-02-04 15:57:07 +00:00
Alex R.M. Turner
18b63e9b5f Have the list also pull windows that are in other workspaces that have the
2008-02-01  Alex R.M. Turner  <armtuk@gmail.com>

        * src/core/display.c (meta_get_tab_entry_list): Have the list also pull 
          windows that are in other workspaces that have the  
          wm_state_needs_attention flag set
        * src/core/window.c (meta_window_set_demands_attention): Make windows that
          are on other workspaces that demand attention that aren't obscured
          count as being obscured
        Bug #333548.

svn path=/trunk/; revision=3533
2008-02-02 04:05:16 +00:00