mirror of
https://github.com/brl/mutter.git
synced 2024-12-24 12:02:04 +00:00
window: Turn grab_op_begin / grab_op_ended into vfuncs
And move the grab_resize_popup management to the X11 window class, as this is only used under X11.
This commit is contained in:
parent
7726001d43
commit
575963bee7
@ -462,8 +462,6 @@ struct _MetaWindow
|
||||
|
||||
/* Bypass compositor hints */
|
||||
guint bypass_compositor;
|
||||
|
||||
MetaResizePopup *grab_resize_popup;
|
||||
};
|
||||
|
||||
struct _MetaWindowClass
|
||||
@ -479,6 +477,10 @@ struct _MetaWindowClass
|
||||
void (*kill) (MetaWindow *window);
|
||||
void (*focus) (MetaWindow *window,
|
||||
guint32 timestamp);
|
||||
void (*grab_op_began) (MetaWindow *window,
|
||||
MetaGrabOp op);
|
||||
void (*grab_op_ended) (MetaWindow *window,
|
||||
MetaGrabOp op);
|
||||
void (*move_resize_internal) (MetaWindow *window,
|
||||
int gravity,
|
||||
MetaRectangle requested_rect,
|
||||
|
@ -40,7 +40,6 @@
|
||||
#include "place.h"
|
||||
#include <meta/prefs.h>
|
||||
#include <meta/group.h>
|
||||
#include "resizepopup.h"
|
||||
#include "constraints.h"
|
||||
#include "mutter-enum-types.h"
|
||||
#include "core.h"
|
||||
@ -194,6 +193,19 @@ prefs_changed_callback (MetaPreference pref,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_real_grab_op_began (MetaWindow *window,
|
||||
MetaGrabOp op)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_real_grab_op_ended (MetaWindow *window,
|
||||
MetaGrabOp op)
|
||||
{
|
||||
window->shaken_loose = FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_window_real_update_struts (MetaWindow *window)
|
||||
{
|
||||
@ -365,6 +377,8 @@ meta_window_class_init (MetaWindowClass *klass)
|
||||
object_class->get_property = meta_window_get_property;
|
||||
object_class->set_property = meta_window_set_property;
|
||||
|
||||
klass->grab_op_began = meta_window_real_grab_op_began;
|
||||
klass->grab_op_ended = meta_window_real_grab_op_ended;
|
||||
klass->update_struts = meta_window_real_update_struts;
|
||||
klass->get_default_skip_hints = meta_window_real_get_default_skip_hints;
|
||||
|
||||
@ -4141,23 +4155,6 @@ meta_window_update_monitor (MetaWindow *window)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_refresh_resize_popup (MetaWindow *window)
|
||||
{
|
||||
MetaRectangle rect;
|
||||
|
||||
meta_window_get_client_root_coords (window, &rect);
|
||||
|
||||
meta_ui_resize_popup_set (window->grab_resize_popup,
|
||||
rect,
|
||||
window->size_hints.base_width,
|
||||
window->size_hints.base_height,
|
||||
window->size_hints.width_inc,
|
||||
window->size_hints.height_inc);
|
||||
|
||||
meta_ui_resize_popup_set_showing (window->grab_resize_popup, TRUE);
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_move_resize_internal (MetaWindow *window,
|
||||
MetaMoveResizeFlags flags,
|
||||
@ -4334,9 +4331,6 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
meta_topic (META_DEBUG_GEOMETRY, "Size/position not modified\n");
|
||||
}
|
||||
|
||||
if (window->grab_resize_popup)
|
||||
meta_window_refresh_resize_popup (window);
|
||||
|
||||
meta_window_update_monitor (window);
|
||||
|
||||
/* Invariants leaving this function are:
|
||||
@ -8903,29 +8897,12 @@ void
|
||||
meta_window_grab_op_began (MetaWindow *window,
|
||||
MetaGrabOp op)
|
||||
{
|
||||
if (meta_grab_op_is_resizing (op))
|
||||
{
|
||||
if (window->sync_request_counter != None)
|
||||
meta_window_create_sync_request_alarm (window);
|
||||
|
||||
if (window->size_hints.width_inc > 1 || window->size_hints.height_inc > 1)
|
||||
{
|
||||
window->grab_resize_popup = meta_ui_resize_popup_new (window->display->xdisplay,
|
||||
window->screen->number);
|
||||
meta_window_refresh_resize_popup (window);
|
||||
}
|
||||
}
|
||||
META_WINDOW_GET_CLASS (window)->grab_op_began (window, op);
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_grab_op_ended (MetaWindow *window,
|
||||
MetaGrabOp op)
|
||||
{
|
||||
window->shaken_loose = FALSE;
|
||||
|
||||
if (window->grab_resize_popup)
|
||||
{
|
||||
meta_ui_resize_popup_free (window->grab_resize_popup);
|
||||
window->grab_resize_popup = NULL;
|
||||
}
|
||||
META_WINDOW_GET_CLASS (window)->grab_op_ended (window, op);
|
||||
}
|
||||
|
@ -50,6 +50,8 @@ struct _MetaWindowX11Private
|
||||
guint using_net_wm_visible_name : 1; /* tracked so we can clear it */
|
||||
|
||||
Atom type_atom;
|
||||
|
||||
MetaResizePopup *grab_resize_popup;
|
||||
};
|
||||
|
||||
G_END_DECLS
|
||||
|
@ -44,6 +44,7 @@
|
||||
#include "window-private.h"
|
||||
#include "window-props.h"
|
||||
#include "xprops.h"
|
||||
#include "resizepopup.h"
|
||||
|
||||
struct _MetaWindowX11Class
|
||||
{
|
||||
@ -498,6 +499,60 @@ meta_window_x11_focus (MetaWindow *window,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_refresh_resize_popup (MetaWindow *window)
|
||||
{
|
||||
MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
|
||||
MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11);
|
||||
MetaRectangle rect;
|
||||
|
||||
meta_window_get_client_root_coords (window, &rect);
|
||||
|
||||
meta_ui_resize_popup_set (priv->grab_resize_popup,
|
||||
rect,
|
||||
window->size_hints.base_width,
|
||||
window->size_hints.base_height,
|
||||
window->size_hints.width_inc,
|
||||
window->size_hints.height_inc);
|
||||
|
||||
meta_ui_resize_popup_set_showing (priv->grab_resize_popup, TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_x11_grab_op_began (MetaWindow *window,
|
||||
MetaGrabOp op)
|
||||
{
|
||||
MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
|
||||
MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11);
|
||||
|
||||
if (meta_grab_op_is_resizing (op))
|
||||
{
|
||||
if (window->sync_request_counter != None)
|
||||
meta_window_create_sync_request_alarm (window);
|
||||
|
||||
if (window->size_hints.width_inc > 1 || window->size_hints.height_inc > 1)
|
||||
{
|
||||
priv->grab_resize_popup = meta_ui_resize_popup_new (window->display->xdisplay,
|
||||
window->screen->number);
|
||||
meta_window_refresh_resize_popup (window);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_x11_grab_op_ended (MetaWindow *window,
|
||||
MetaGrabOp op)
|
||||
{
|
||||
MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
|
||||
MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11);
|
||||
|
||||
if (priv->grab_resize_popup)
|
||||
{
|
||||
meta_ui_resize_popup_free (priv->grab_resize_popup);
|
||||
priv->grab_resize_popup = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
update_net_frame_extents (MetaWindow *window)
|
||||
{
|
||||
@ -619,6 +674,8 @@ meta_window_x11_move_resize_internal (MetaWindow *window,
|
||||
MetaMoveResizeFlags flags,
|
||||
MetaMoveResizeResultFlags *result)
|
||||
{
|
||||
MetaWindowX11 *window_x11 = META_WINDOW_X11 (window);
|
||||
MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11);
|
||||
int root_x_nw, root_y_nw;
|
||||
int w, h;
|
||||
int client_move_x, client_move_y;
|
||||
@ -891,6 +948,9 @@ meta_window_x11_move_resize_internal (MetaWindow *window,
|
||||
if (need_configure_notify)
|
||||
send_configure_notify (window);
|
||||
|
||||
if (priv->grab_resize_popup)
|
||||
meta_window_refresh_resize_popup (window);
|
||||
|
||||
if (frame_shape_changed)
|
||||
*result |= META_MOVE_RESIZE_RESULT_FRAME_SHAPE_CHANGED;
|
||||
if (need_move_client || need_move_frame)
|
||||
@ -1085,6 +1145,8 @@ meta_window_x11_class_init (MetaWindowX11Class *klass)
|
||||
window_class->delete = meta_window_x11_delete;
|
||||
window_class->kill = meta_window_x11_kill;
|
||||
window_class->focus = meta_window_x11_focus;
|
||||
window_class->grab_op_began = meta_window_x11_grab_op_began;
|
||||
window_class->grab_op_ended = meta_window_x11_grab_op_ended;
|
||||
window_class->move_resize_internal = meta_window_x11_move_resize_internal;
|
||||
window_class->update_struts = meta_window_x11_update_struts;
|
||||
window_class->get_default_skip_hints = meta_window_x11_get_default_skip_hints;
|
||||
|
Loading…
Reference in New Issue
Block a user