mirror of
https://github.com/brl/mutter.git
synced 2025-02-23 08:24:09 +00:00
No longer handle ConfigureNotify events directly in mutter
We are now informed of window moves/resizes via callbacks from src/core instead.
This commit is contained in:
parent
6849735e9d
commit
f956853550
@ -79,6 +79,12 @@ struct _MetaCompositor
|
|||||||
MetaScreen *screen,
|
MetaScreen *screen,
|
||||||
MetaWindow *window,
|
MetaWindow *window,
|
||||||
gboolean hidden);
|
gboolean hidden);
|
||||||
|
void (*sync_window_geometry) (MetaCompositor *compositor,
|
||||||
|
MetaWindow *window);
|
||||||
|
void (*sync_screen_size) (MetaCompositor *compositor,
|
||||||
|
MetaScreen *screen,
|
||||||
|
guint width,
|
||||||
|
guint height);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -275,3 +275,25 @@ meta_compositor_set_window_hidden (MetaCompositor *compositor,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
meta_compositor_sync_window_geometry (MetaCompositor *compositor,
|
||||||
|
MetaWindow *window)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||||
|
if (compositor && compositor->sync_window_geometry)
|
||||||
|
compositor->sync_window_geometry (compositor, window);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
meta_compositor_sync_screen_size (MetaCompositor *compositor,
|
||||||
|
MetaScreen *screen,
|
||||||
|
guint width,
|
||||||
|
guint height)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||||
|
if (compositor && compositor->sync_screen_size)
|
||||||
|
compositor->sync_screen_size (compositor, screen, width, height);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -59,6 +59,8 @@
|
|||||||
g_warning ("Integrity check of list failed at %s:%d\n", \
|
g_warning ("Integrity check of list failed at %s:%d\n", \
|
||||||
__FILE__, __LINE__); }
|
__FILE__, __LINE__); }
|
||||||
|
|
||||||
|
/* #define DEBUG_TRACE g_print */
|
||||||
|
#define DEBUG_TRACE(X)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Register GType wrapper for XWindowAttributes, so we do not have to
|
* Register GType wrapper for XWindowAttributes, so we do not have to
|
||||||
@ -1450,60 +1452,6 @@ process_shape (Mutter *compositor,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void
|
|
||||||
process_configure_notify (Mutter *compositor,
|
|
||||||
XConfigureEvent *event)
|
|
||||||
{
|
|
||||||
MetaDisplay *display = compositor->display;
|
|
||||||
MutterWindow *cw;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We get each configure event twice; once through the WM solicitation of the
|
|
||||||
* events on the root window, and once through solicitation on the window
|
|
||||||
* itself -- we will only handle the latter, in which case the event and
|
|
||||||
* window members of the config event are identical.
|
|
||||||
*/
|
|
||||||
if (event->event != event->window)
|
|
||||||
return;
|
|
||||||
|
|
||||||
cw = find_window_in_display (display, event->window);
|
|
||||||
|
|
||||||
if (cw)
|
|
||||||
{
|
|
||||||
sync_actor_position (cw);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Check for root window geometry change
|
|
||||||
*/
|
|
||||||
GSList *l = meta_display_get_screens (display);
|
|
||||||
|
|
||||||
while (l)
|
|
||||||
{
|
|
||||||
MetaScreen *screen = l->data;
|
|
||||||
Window xroot = meta_screen_get_xroot (screen);
|
|
||||||
|
|
||||||
if (event->window == xroot)
|
|
||||||
{
|
|
||||||
gint width;
|
|
||||||
gint height;
|
|
||||||
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
|
||||||
|
|
||||||
meta_screen_get_size (screen, &width, &height);
|
|
||||||
clutter_actor_set_size (info->stage, width, height);
|
|
||||||
|
|
||||||
meta_verbose ("Changed size for stage on screen %d to %dx%d\n",
|
|
||||||
meta_screen_get_screen_number (screen),
|
|
||||||
width, height);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
l = l->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
process_property_notify (Mutter *compositor,
|
process_property_notify (Mutter *compositor,
|
||||||
XPropertyEvent *event)
|
XPropertyEvent *event)
|
||||||
@ -1526,7 +1474,10 @@ process_property_notify (Mutter *compositor,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!cw)
|
if (!cw)
|
||||||
return;
|
{
|
||||||
|
DEBUG_TRACE ("process_property_notify: opacity, early exit\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (meta_prop_get_cardinal (display, event->window,
|
if (meta_prop_get_cardinal (display, event->window,
|
||||||
compositor->atom_net_wm_window_opacity,
|
compositor->atom_net_wm_window_opacity,
|
||||||
@ -1548,11 +1499,16 @@ process_property_notify (Mutter *compositor,
|
|||||||
MutterWindow *cw = find_window_in_display (display, event->window);
|
MutterWindow *cw = find_window_in_display (display, event->window);
|
||||||
|
|
||||||
if (!cw)
|
if (!cw)
|
||||||
return;
|
{
|
||||||
|
DEBUG_TRACE ("process_property_notify: net_wm_type, early exit\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
mutter_window_query_window_type (cw);
|
mutter_window_query_window_type (cw);
|
||||||
|
DEBUG_TRACE ("process_property_notify: net_wm_type\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
DEBUG_TRACE ("process_property_notify: unknown\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1741,6 +1697,7 @@ clutter_cmp_add_window (MetaCompositor *compositor,
|
|||||||
MetaScreen *screen = meta_window_get_screen (window);
|
MetaScreen *screen = meta_window_get_screen (window);
|
||||||
MetaDisplay *display = meta_screen_get_display (screen);
|
MetaDisplay *display = meta_screen_get_display (screen);
|
||||||
|
|
||||||
|
DEBUG_TRACE ("clutter_cmp_add_window\n");
|
||||||
meta_error_trap_push (display);
|
meta_error_trap_push (display);
|
||||||
|
|
||||||
add_win (window);
|
add_win (window);
|
||||||
@ -1756,6 +1713,7 @@ clutter_cmp_remove_window (MetaCompositor *compositor,
|
|||||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||||
MutterWindow *cw = NULL;
|
MutterWindow *cw = NULL;
|
||||||
|
|
||||||
|
DEBUG_TRACE ("clutter_cmp_remove_window\n");
|
||||||
cw = meta_window_get_compositor_private (window);
|
cw = meta_window_get_compositor_private (window);
|
||||||
if (!cw)
|
if (!cw)
|
||||||
return;
|
return;
|
||||||
@ -1792,7 +1750,10 @@ clutter_cmp_process_event (MetaCompositor *compositor,
|
|||||||
|
|
||||||
if (mutter_plugin_manager_xevent_filter (info->plugin_mgr,
|
if (mutter_plugin_manager_xevent_filter (info->plugin_mgr,
|
||||||
event) == TRUE)
|
event) == TRUE)
|
||||||
return;
|
{
|
||||||
|
DEBUG_TRACE ("clutter_cmp_process_event (filtered,window==NULL)\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1811,6 +1772,7 @@ clutter_cmp_process_event (MetaCompositor *compositor,
|
|||||||
if (mutter_plugin_manager_xevent_filter (info->plugin_mgr,
|
if (mutter_plugin_manager_xevent_filter (info->plugin_mgr,
|
||||||
event) == TRUE)
|
event) == TRUE)
|
||||||
{
|
{
|
||||||
|
DEBUG_TRACE ("clutter_cmp_process_event (filtered,window==NULL)\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1828,10 +1790,6 @@ clutter_cmp_process_event (MetaCompositor *compositor,
|
|||||||
meta_error_trap_push (xrc->display);
|
meta_error_trap_push (xrc->display);
|
||||||
switch (event->type)
|
switch (event->type)
|
||||||
{
|
{
|
||||||
case ConfigureNotify:
|
|
||||||
process_configure_notify (xrc, (XConfigureEvent *) event);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PropertyNotify:
|
case PropertyNotify:
|
||||||
process_property_notify (xrc, (XPropertyEvent *) event);
|
process_property_notify (xrc, (XPropertyEvent *) event);
|
||||||
break;
|
break;
|
||||||
@ -1839,11 +1797,15 @@ clutter_cmp_process_event (MetaCompositor *compositor,
|
|||||||
default:
|
default:
|
||||||
if (event->type == meta_display_get_damage_event_base (xrc->display) + XDamageNotify)
|
if (event->type == meta_display_get_damage_event_base (xrc->display) + XDamageNotify)
|
||||||
{
|
{
|
||||||
|
DEBUG_TRACE ("clutter_cmp_process_event (process_damage)\n");
|
||||||
process_damage (xrc, (XDamageNotifyEvent *) event);
|
process_damage (xrc, (XDamageNotifyEvent *) event);
|
||||||
}
|
}
|
||||||
#ifdef HAVE_SHAPE
|
#ifdef HAVE_SHAPE
|
||||||
else if (event->type == meta_display_get_shape_event_base (xrc->display) + ShapeNotify)
|
else if (event->type == meta_display_get_shape_event_base (xrc->display) + ShapeNotify)
|
||||||
process_shape (xrc, (XShapeEvent *) event);
|
{
|
||||||
|
DEBUG_TRACE ("clutter_cmp_process_event (process_shape)\n");
|
||||||
|
process_shape (xrc, (XShapeEvent *) event);
|
||||||
|
}
|
||||||
#endif /* HAVE_SHAPE */
|
#endif /* HAVE_SHAPE */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1879,6 +1841,7 @@ clutter_cmp_map_window (MetaCompositor *compositor, MetaWindow *window)
|
|||||||
{
|
{
|
||||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||||
MutterWindow *cw = meta_window_get_compositor_private (window);
|
MutterWindow *cw = meta_window_get_compositor_private (window);
|
||||||
|
DEBUG_TRACE ("clutter_cmp_map_window\n");
|
||||||
if (!cw)
|
if (!cw)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1891,6 +1854,7 @@ clutter_cmp_unmap_window (MetaCompositor *compositor, MetaWindow *window)
|
|||||||
{
|
{
|
||||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||||
MutterWindow *cw = meta_window_get_compositor_private (window);
|
MutterWindow *cw = meta_window_get_compositor_private (window);
|
||||||
|
DEBUG_TRACE ("clutter_cmp_unmap_window\n");
|
||||||
if (!cw)
|
if (!cw)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1909,6 +1873,8 @@ clutter_cmp_minimize_window (MetaCompositor *compositor,
|
|||||||
MetaScreen *screen = meta_window_get_screen (window);
|
MetaScreen *screen = meta_window_get_screen (window);
|
||||||
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
||||||
|
|
||||||
|
DEBUG_TRACE ("clutter_cmp_minimize_window\n");
|
||||||
|
|
||||||
g_return_if_fail (info);
|
g_return_if_fail (info);
|
||||||
|
|
||||||
if (!cw)
|
if (!cw)
|
||||||
@ -1964,6 +1930,7 @@ clutter_cmp_unminimize_window (MetaCompositor *compositor,
|
|||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
MutterWindow *cw = meta_window_get_compositor_private (window);
|
MutterWindow *cw = meta_window_get_compositor_private (window);
|
||||||
|
DEBUG_TRACE ("clutter_cmp_unminimize_window\n");
|
||||||
if (!cw)
|
if (!cw)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1983,6 +1950,7 @@ clutter_cmp_maximize_window (MetaCompositor *compositor,
|
|||||||
MetaScreen *screen = meta_window_get_screen (window);
|
MetaScreen *screen = meta_window_get_screen (window);
|
||||||
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
||||||
|
|
||||||
|
DEBUG_TRACE ("clutter_cmp_maximize_window\n");
|
||||||
g_return_if_fail (info);
|
g_return_if_fail (info);
|
||||||
|
|
||||||
if (!cw)
|
if (!cw)
|
||||||
@ -2014,6 +1982,7 @@ clutter_cmp_unmaximize_window (MetaCompositor *compositor,
|
|||||||
|
|
||||||
g_return_if_fail (info);
|
g_return_if_fail (info);
|
||||||
|
|
||||||
|
DEBUG_TRACE ("clutter_cmp_unmaximize_window\n");
|
||||||
if (!cw)
|
if (!cw)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -2040,6 +2009,7 @@ clutter_cmp_update_workspace_geometry (MetaCompositor *compositor,
|
|||||||
MetaCompScreen *info;
|
MetaCompScreen *info;
|
||||||
MutterPluginManager *mgr;
|
MutterPluginManager *mgr;
|
||||||
|
|
||||||
|
DEBUG_TRACE ("clutter_cmp_update_workspace_geometry\n");
|
||||||
info = meta_screen_get_compositor_data (screen);
|
info = meta_screen_get_compositor_data (screen);
|
||||||
mgr = info->plugin_mgr;
|
mgr = info->plugin_mgr;
|
||||||
|
|
||||||
@ -2065,6 +2035,7 @@ clutter_cmp_switch_workspace (MetaCompositor *compositor,
|
|||||||
to_indx = meta_workspace_index (to);
|
to_indx = meta_workspace_index (to);
|
||||||
from_indx = meta_workspace_index (from);
|
from_indx = meta_workspace_index (from);
|
||||||
|
|
||||||
|
DEBUG_TRACE ("clutter_cmp_switch_workspace\n");
|
||||||
if (!meta_prefs_get_live_hidden_windows ())
|
if (!meta_prefs_get_live_hidden_windows ())
|
||||||
{
|
{
|
||||||
GList *l;
|
GList *l;
|
||||||
@ -2152,7 +2123,8 @@ clutter_cmp_sync_stack (MetaCompositor *compositor,
|
|||||||
{
|
{
|
||||||
GList *tmp;
|
GList *tmp;
|
||||||
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
||||||
|
|
||||||
|
DEBUG_TRACE ("clutter_cmp_sync_stack\n");
|
||||||
/* NB: The first entry in stack, is stacked the highest */
|
/* NB: The first entry in stack, is stacked the highest */
|
||||||
|
|
||||||
for (tmp = stack; tmp != NULL; tmp = tmp->next)
|
for (tmp = stack; tmp != NULL; tmp = tmp->next)
|
||||||
@ -2183,6 +2155,7 @@ clutter_cmp_set_window_hidden (MetaCompositor *compositor,
|
|||||||
MutterWindow *cw = window->compositor_private;
|
MutterWindow *cw = window->compositor_private;
|
||||||
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
||||||
|
|
||||||
|
DEBUG_TRACE ("clutter_cmp_set_window_hidden\n");
|
||||||
if (!cw)
|
if (!cw)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -2202,6 +2175,46 @@ clutter_cmp_set_window_hidden (MetaCompositor *compositor,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
clutter_cmp_sync_window_geometry (MetaCompositor *compositor,
|
||||||
|
MetaWindow *window)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||||
|
MutterWindow *cw = meta_window_get_compositor_private (window);
|
||||||
|
MetaScreen *screen = meta_window_get_screen (window);
|
||||||
|
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
||||||
|
|
||||||
|
DEBUG_TRACE ("clutter_cmp_sync_window_geometry\n");
|
||||||
|
g_return_if_fail (info);
|
||||||
|
|
||||||
|
if (!cw)
|
||||||
|
return;
|
||||||
|
|
||||||
|
sync_actor_position (cw);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
clutter_cmp_sync_screen_size (MetaCompositor *compositor,
|
||||||
|
MetaScreen *screen,
|
||||||
|
guint width,
|
||||||
|
guint height)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||||
|
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
||||||
|
|
||||||
|
DEBUG_TRACE ("clutter_cmp_sync_screen_size\n");
|
||||||
|
g_return_if_fail (info);
|
||||||
|
|
||||||
|
clutter_actor_set_size (info->stage, width, height);
|
||||||
|
|
||||||
|
meta_verbose ("Changed size for stage on screen %d to %dx%d\n",
|
||||||
|
meta_screen_get_screen_number (screen),
|
||||||
|
width, height);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static MetaCompositor comp_info = {
|
static MetaCompositor comp_info = {
|
||||||
clutter_cmp_destroy,
|
clutter_cmp_destroy,
|
||||||
clutter_cmp_manage_screen,
|
clutter_cmp_manage_screen,
|
||||||
@ -2221,7 +2234,9 @@ static MetaCompositor comp_info = {
|
|||||||
clutter_cmp_update_workspace_geometry,
|
clutter_cmp_update_workspace_geometry,
|
||||||
clutter_cmp_switch_workspace,
|
clutter_cmp_switch_workspace,
|
||||||
clutter_cmp_sync_stack,
|
clutter_cmp_sync_stack,
|
||||||
clutter_cmp_set_window_hidden
|
clutter_cmp_set_window_hidden,
|
||||||
|
clutter_cmp_sync_window_geometry,
|
||||||
|
clutter_cmp_sync_screen_size
|
||||||
};
|
};
|
||||||
|
|
||||||
MetaCompositor *
|
MetaCompositor *
|
||||||
|
@ -2353,6 +2353,10 @@ meta_screen_resize (MetaScreen *screen,
|
|||||||
reload_xinerama_infos (screen);
|
reload_xinerama_infos (screen);
|
||||||
set_desktop_geometry_hint (screen);
|
set_desktop_geometry_hint (screen);
|
||||||
|
|
||||||
|
if (screen->display->compositor)
|
||||||
|
meta_compositor_sync_screen_size (screen->display->compositor,
|
||||||
|
screen, width, height);
|
||||||
|
|
||||||
/* Queue a resize on all the windows */
|
/* Queue a resize on all the windows */
|
||||||
meta_screen_foreach_window (screen, meta_screen_resize_func, 0);
|
meta_screen_foreach_window (screen, meta_screen_resize_func, 0);
|
||||||
}
|
}
|
||||||
|
@ -3721,6 +3721,8 @@ meta_window_move_resize_internal (MetaWindow *window,
|
|||||||
newx, newy, window->rect.width, window->rect.height,
|
newx, newy, window->rect.width, window->rect.height,
|
||||||
window->user_rect.x, window->user_rect.y,
|
window->user_rect.x, window->user_rect.y,
|
||||||
window->user_rect.width, window->user_rect.height);
|
window->user_rect.width, window->user_rect.height);
|
||||||
|
meta_compositor_sync_window_geometry (window->display->compositor,
|
||||||
|
window);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -3878,6 +3880,8 @@ meta_window_configure_notify (MetaWindow *window, XConfigureEvent *event)
|
|||||||
window->rect.height = event->height;
|
window->rect.height = event->height;
|
||||||
if (!event->override_redirect && !event->send_event)
|
if (!event->override_redirect && !event->send_event)
|
||||||
meta_warning ("Unhandled change of windows override redirect status\n");
|
meta_warning ("Unhandled change of windows override redirect status\n");
|
||||||
|
|
||||||
|
meta_compositor_sync_window_geometry (window->display->compositor, window);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -145,6 +145,15 @@ meta_compositor_set_window_hidden (MetaCompositor *compositor,
|
|||||||
MetaScreen *screen,
|
MetaScreen *screen,
|
||||||
MetaWindow *window,
|
MetaWindow *window,
|
||||||
gboolean hidden);
|
gboolean hidden);
|
||||||
|
|
||||||
|
void
|
||||||
|
meta_compositor_sync_window_geometry (MetaCompositor *compositor,
|
||||||
|
MetaWindow *window);
|
||||||
|
void
|
||||||
|
meta_compositor_sync_screen_size (MetaCompositor *compositor,
|
||||||
|
MetaScreen *screen,
|
||||||
|
guint width,
|
||||||
|
guint height);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user