window: Replace map/unmap vfunc with signal
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3728>
This commit is contained in:
parent
a99e139a68
commit
fdf9c32dac
@ -612,9 +612,6 @@ struct _MetaWindowClass
|
|||||||
|
|
||||||
gboolean (*set_transient_for) (MetaWindow *window,
|
gboolean (*set_transient_for) (MetaWindow *window,
|
||||||
MetaWindow *parent);
|
MetaWindow *parent);
|
||||||
|
|
||||||
void (* map) (MetaWindow *window);
|
|
||||||
void (* unmap) (MetaWindow *window);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* These differ from window->has_foo_func in that they consider
|
/* These differ from window->has_foo_func in that they consider
|
||||||
|
@ -221,6 +221,7 @@ enum
|
|||||||
PROP_DISPLAY,
|
PROP_DISPLAY,
|
||||||
PROP_EFFECT,
|
PROP_EFFECT,
|
||||||
PROP_SUSPEND_STATE,
|
PROP_SUSPEND_STATE,
|
||||||
|
PROP_MAPPED,
|
||||||
|
|
||||||
PROP_LAST,
|
PROP_LAST,
|
||||||
};
|
};
|
||||||
@ -439,6 +440,9 @@ meta_window_get_property(GObject *object,
|
|||||||
case PROP_SUSPEND_STATE:
|
case PROP_SUSPEND_STATE:
|
||||||
g_value_set_enum (value, priv->suspend_state);
|
g_value_set_enum (value, priv->suspend_state);
|
||||||
break;
|
break;
|
||||||
|
case PROP_MAPPED:
|
||||||
|
g_value_set_boolean (value, win->mapped);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -598,15 +602,17 @@ meta_window_class_init (MetaWindowClass *klass)
|
|||||||
META_COMP_EFFECT_NONE,
|
META_COMP_EFFECT_NONE,
|
||||||
G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
|
G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE);
|
||||||
|
|
||||||
/**
|
|
||||||
* MetaWindow::suspend-state: (skip)
|
|
||||||
*/
|
|
||||||
obj_props[PROP_SUSPEND_STATE] =
|
obj_props[PROP_SUSPEND_STATE] =
|
||||||
g_param_spec_enum ("suspend-state", NULL, NULL,
|
g_param_spec_enum ("suspend-state", NULL, NULL,
|
||||||
META_TYPE_WINDOW_SUSPEND_STATE,
|
META_TYPE_WINDOW_SUSPEND_STATE,
|
||||||
META_WINDOW_SUSPEND_STATE_ACTIVE,
|
META_WINDOW_SUSPEND_STATE_ACTIVE,
|
||||||
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
|
obj_props[PROP_MAPPED] =
|
||||||
|
g_param_spec_boolean ("mapped", NULL, NULL,
|
||||||
|
FALSE,
|
||||||
|
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
g_object_class_install_properties (object_class, PROP_LAST, obj_props);
|
g_object_class_install_properties (object_class, PROP_LAST, obj_props);
|
||||||
|
|
||||||
window_signals[WORKSPACE_CHANGED] =
|
window_signals[WORKSPACE_CHANGED] =
|
||||||
@ -833,11 +839,7 @@ sync_client_window_mapped (MetaWindow *window)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
window->mapped = should_be_mapped;
|
window->mapped = should_be_mapped;
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (window), obj_props[PROP_MAPPED]);
|
||||||
if (window->mapped)
|
|
||||||
META_WINDOW_GET_CLASS (window)->map (window);
|
|
||||||
else
|
|
||||||
META_WINDOW_GET_CLASS (window)->unmap (window);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -816,16 +816,6 @@ meta_window_wayland_calculate_layer (MetaWindow *window)
|
|||||||
return meta_window_get_default_layer (window);
|
return meta_window_get_default_layer (window);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
meta_window_wayland_map (MetaWindow *window)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
meta_window_wayland_unmap (MetaWindow *window)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_window_wayland_constructed (GObject *object)
|
meta_window_wayland_constructed (GObject *object)
|
||||||
{
|
{
|
||||||
@ -935,8 +925,6 @@ meta_window_wayland_class_init (MetaWindowWaylandClass *klass)
|
|||||||
window_class->can_ping = meta_window_wayland_can_ping;
|
window_class->can_ping = meta_window_wayland_can_ping;
|
||||||
window_class->are_updates_frozen = meta_window_wayland_are_updates_frozen;
|
window_class->are_updates_frozen = meta_window_wayland_are_updates_frozen;
|
||||||
window_class->calculate_layer = meta_window_wayland_calculate_layer;
|
window_class->calculate_layer = meta_window_wayland_calculate_layer;
|
||||||
window_class->map = meta_window_wayland_map;
|
|
||||||
window_class->unmap = meta_window_wayland_unmap;
|
|
||||||
window_class->is_focus_async = meta_window_wayland_is_focus_async;
|
window_class->is_focus_async = meta_window_wayland_is_focus_async;
|
||||||
window_class->get_wayland_surface = meta_window_wayland_get_wayland_surface;
|
window_class->get_wayland_surface = meta_window_wayland_get_wayland_surface;
|
||||||
window_class->set_transient_for = meta_window_wayland_set_transient_for;
|
window_class->set_transient_for = meta_window_wayland_set_transient_for;
|
||||||
|
@ -1956,26 +1956,25 @@ meta_window_x11_impl_thaw_commits (MetaWindow *window)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_window_x11_map (MetaWindow *window)
|
on_mapped_changed (MetaWindow *window)
|
||||||
{
|
{
|
||||||
MetaX11Display *x11_display = window->display->x11_display;
|
MetaX11Display *x11_display = window->display->x11_display;
|
||||||
|
|
||||||
|
if (window->mapped)
|
||||||
|
{
|
||||||
mtk_x11_error_trap_push (x11_display->xdisplay);
|
mtk_x11_error_trap_push (x11_display->xdisplay);
|
||||||
XMapWindow (x11_display->xdisplay,
|
XMapWindow (x11_display->xdisplay,
|
||||||
meta_window_x11_get_xwindow (window));
|
meta_window_x11_get_xwindow (window));
|
||||||
mtk_x11_error_trap_pop (x11_display->xdisplay);
|
mtk_x11_error_trap_pop (x11_display->xdisplay);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
static void
|
{
|
||||||
meta_window_x11_unmap (MetaWindow *window)
|
|
||||||
{
|
|
||||||
MetaX11Display *x11_display = window->display->x11_display;
|
|
||||||
|
|
||||||
mtk_x11_error_trap_push (x11_display->xdisplay);
|
mtk_x11_error_trap_push (x11_display->xdisplay);
|
||||||
XUnmapWindow (x11_display->xdisplay,
|
XUnmapWindow (x11_display->xdisplay,
|
||||||
meta_window_x11_get_xwindow (window));
|
meta_window_x11_get_xwindow (window));
|
||||||
mtk_x11_error_trap_pop (x11_display->xdisplay);
|
mtk_x11_error_trap_pop (x11_display->xdisplay);
|
||||||
window->unmaps_pending ++;
|
window->unmaps_pending ++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -2097,6 +2096,10 @@ meta_window_x11_constructed (GObject *object)
|
|||||||
G_CALLBACK (meta_window_x11_update_input_region),
|
G_CALLBACK (meta_window_x11_update_input_region),
|
||||||
window);
|
window);
|
||||||
|
|
||||||
|
g_signal_connect (window, "notify::mapped",
|
||||||
|
G_CALLBACK (on_mapped_changed),
|
||||||
|
NULL);
|
||||||
|
|
||||||
G_OBJECT_CLASS (meta_window_x11_parent_class)->constructed (object);
|
G_OBJECT_CLASS (meta_window_x11_parent_class)->constructed (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2194,8 +2197,6 @@ meta_window_x11_class_init (MetaWindowX11Class *klass)
|
|||||||
window_class->can_ping = meta_window_x11_can_ping;
|
window_class->can_ping = meta_window_x11_can_ping;
|
||||||
window_class->are_updates_frozen = meta_window_x11_are_updates_frozen;
|
window_class->are_updates_frozen = meta_window_x11_are_updates_frozen;
|
||||||
window_class->calculate_layer = meta_window_x11_calculate_layer;
|
window_class->calculate_layer = meta_window_x11_calculate_layer;
|
||||||
window_class->map = meta_window_x11_map;
|
|
||||||
window_class->unmap = meta_window_x11_unmap;
|
|
||||||
window_class->is_focus_async = meta_window_x11_is_focus_async;
|
window_class->is_focus_async = meta_window_x11_is_focus_async;
|
||||||
window_class->set_transient_for = meta_window_x11_set_transient_for;
|
window_class->set_transient_for = meta_window_x11_set_transient_for;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user