[mutter] frames: Embed a pointer to MetaFrames inside MetaUIFrame
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] frames: Embed a pointer to MetaFrames inside MetaUIFrame
- Date: Thu, 1 Jan 2015 06:45:32 +0000 (UTC)
commit 015864da09eb8b06161e37fff69fea27d597a992
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Wed Dec 31 22:04:11 2014 -0800
frames: Embed a pointer to MetaFrames inside MetaUIFrame
This removes the MetaFrames argument from our internal APIs.
src/ui/frames.c | 156 ++++++++++++++++++++++---------------------------------
src/ui/frames.h | 1 +
2 files changed, 63 insertions(+), 94 deletions(-)
---
diff --git a/src/ui/frames.c b/src/ui/frames.c
index bfcee30..fa56588 100644
--- a/src/ui/frames.c
+++ b/src/ui/frames.c
@@ -40,8 +40,7 @@ static void meta_frames_destroy (GtkWidget *object);
static void meta_frames_finalize (GObject *object);
static void meta_frames_style_updated (GtkWidget *widget);
-static void meta_frames_update_prelit_control (MetaFrames *frames,
- MetaUIFrame *frame,
+static void meta_frames_update_prelit_control (MetaUIFrame *frame,
MetaFrameControl control);
static gboolean meta_frames_button_press_event (GtkWidget *widget,
GdkEventButton *event);
@@ -58,15 +57,12 @@ static gboolean meta_frames_enter_notify_event (GtkWidget *widget,
static gboolean meta_frames_leave_notify_event (GtkWidget *widget,
GdkEventCrossing *event);
-static void meta_frames_attach_style (MetaFrames *frames,
- MetaUIFrame *frame);
+static void meta_frames_attach_style (MetaUIFrame *frame);
-static void meta_frames_paint (MetaFrames *frames,
- MetaUIFrame *frame,
+static void meta_frames_paint (MetaUIFrame *frame,
cairo_t *cr);
-static void meta_frames_calc_geometry (MetaFrames *frames,
- MetaUIFrame *frame,
+static void meta_frames_calc_geometry (MetaUIFrame *frame,
MetaFrameGeometry *fgeom);
static MetaUIFrame* meta_frames_lookup_window (MetaFrames *frames,
@@ -78,12 +74,9 @@ static void meta_frames_button_layout_changed (MetaFrames *frames);
static GdkRectangle* control_rect (MetaFrameControl control,
MetaFrameGeometry *fgeom);
-static MetaFrameControl get_control (MetaFrames *frames,
- MetaUIFrame *frame,
+static MetaFrameControl get_control (MetaUIFrame *frame,
int x,
int y);
-static void invalidate_whole_window (MetaFrames *frames,
- MetaUIFrame *frame);
G_DEFINE_TYPE (MetaFrames, meta_frames, GTK_TYPE_WINDOW);
@@ -167,6 +160,12 @@ prefs_changed_callback (MetaPreference pref,
}
}
+static void
+invalidate_whole_window (MetaUIFrame *frame)
+{
+ gdk_window_invalidate_rect (frame->window, NULL, FALSE);
+}
+
static MetaStyleInfo *
meta_frames_get_theme_variant (MetaFrames *frames,
const gchar *variant)
@@ -288,13 +287,9 @@ meta_frames_finalize (GObject *object)
static void
queue_recalc_func (gpointer key, gpointer value, gpointer data)
{
- MetaUIFrame *frame;
- MetaFrames *frames;
-
- frames = META_FRAMES (data);
- frame = value;
+ MetaUIFrame *frame = value;
- invalidate_whole_window (frames, frame);
+ invalidate_whole_window (frame);
meta_core_queue_frame_resize (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
frame->xwindow);
if (frame->text_layout)
@@ -326,13 +321,8 @@ meta_frames_font_changed (MetaFrames *frames)
static void
queue_draw_func (gpointer key, gpointer value, gpointer data)
{
- MetaUIFrame *frame;
- MetaFrames *frames;
-
- frames = META_FRAMES (data);
- frame = value;
-
- invalidate_whole_window (frames, frame);
+ MetaUIFrame *frame = value;
+ invalidate_whole_window (frame);
}
static void
@@ -345,13 +335,8 @@ meta_frames_button_layout_changed (MetaFrames *frames)
static void
reattach_style_func (gpointer key, gpointer value, gpointer data)
{
- MetaUIFrame *frame;
- MetaFrames *frames;
-
- frames = META_FRAMES (data);
- frame = value;
-
- meta_frames_attach_style (frames, frame);
+ MetaUIFrame *frame = value;
+ meta_frames_attach_style (frame);
}
static void
@@ -365,8 +350,7 @@ meta_frames_style_updated (GtkWidget *widget)
update_style_contexts (frames);
- g_hash_table_foreach (frames->frames,
- reattach_style_func, frames);
+ g_hash_table_foreach (frames->frames, reattach_style_func, NULL);
meta_retheme_all ();
@@ -374,10 +358,10 @@ meta_frames_style_updated (GtkWidget *widget)
}
static void
-meta_frames_ensure_layout (MetaFrames *frames,
- MetaUIFrame *frame,
+meta_frames_ensure_layout (MetaUIFrame *frame,
MetaFrameType type)
{
+ MetaFrames *frames = frame->frames;
GtkWidget *widget;
MetaFrameLayout *layout;
@@ -444,8 +428,7 @@ meta_frames_ensure_layout (MetaFrames *frames,
}
static void
-meta_frames_calc_geometry (MetaFrames *frames,
- MetaUIFrame *frame,
+meta_frames_calc_geometry (MetaUIFrame *frame,
MetaFrameGeometry *fgeom)
{
int width, height;
@@ -460,7 +443,7 @@ meta_frames_calc_geometry (MetaFrames *frames,
META_CORE_GET_FRAME_TYPE, &type,
META_CORE_GET_END);
- meta_frames_ensure_layout (frames, frame, type);
+ meta_frames_ensure_layout (frame, type);
meta_prefs_get_button_layout (&button_layout);
@@ -507,9 +490,9 @@ meta_frames_new (int screen_number)
* and attach separately for each window.
*/
static void
-meta_frames_attach_style (MetaFrames *frames,
- MetaUIFrame *frame)
+meta_frames_attach_style (MetaUIFrame *frame)
{
+ MetaFrames *frames = frame->frames;
gboolean has_frame;
char *variant = NULL;
@@ -540,6 +523,7 @@ meta_frames_manage_window (MetaFrames *frames,
frame = g_new (MetaUIFrame, 1);
+ frame->frames = frames;
frame->window = window;
gdk_window_set_user_data (frame->window, frames);
@@ -611,8 +595,7 @@ meta_frames_lookup_window (MetaFrames *frames,
}
static void
-meta_ui_frame_get_borders (MetaFrames *frames,
- MetaUIFrame *frame,
+meta_ui_frame_get_borders (MetaUIFrame *frame,
MetaFrameBorders *borders)
{
MetaFrameFlags flags;
@@ -625,7 +608,7 @@ meta_ui_frame_get_borders (MetaFrames *frames,
g_return_if_fail (type < META_FRAME_TYPE_LAST);
- meta_frames_ensure_layout (frames, frame, type);
+ meta_frames_ensure_layout (frame, type);
/* We can't get the full geometry, because that depends on
* the client window size and probably we're being called
@@ -652,7 +635,7 @@ meta_frames_get_borders (MetaFrames *frames,
if (frame == NULL)
meta_bug ("No such frame 0x%lx\n", xwindow);
- meta_ui_frame_get_borders (frames, frame, borders);
+ meta_ui_frame_get_borders (frame, borders);
}
/* The client rectangle surrounds client window; it subtracts both
@@ -687,8 +670,7 @@ get_visible_frame_rect (MetaFrameGeometry *fgeom,
}
static cairo_region_t *
-get_visible_region (MetaFrames *frames,
- MetaUIFrame *frame,
+get_visible_region (MetaUIFrame *frame,
MetaFrameGeometry *fgeom,
int window_width,
int window_height)
@@ -792,11 +774,9 @@ meta_frames_get_frame_bounds (MetaFrames *frames,
frame = meta_frames_lookup_window (frames, xwindow);
g_return_val_if_fail (frame != NULL, NULL);
- meta_frames_calc_geometry (frames, frame, &fgeom);
+ meta_frames_calc_geometry (frame, &fgeom);
- return get_visible_region (frames, frame,
- &fgeom,
- window_width, window_height);
+ return get_visible_region (frame, &fgeom, window_width, window_height);
}
void
@@ -816,7 +796,7 @@ meta_frames_move_resize_frame (MetaFrames *frames,
gdk_window_move_resize (frame->window, x, y, width, height);
if (old_width != width || old_height != height)
- invalidate_whole_window (frames, frame);
+ invalidate_whole_window (frame);
}
void
@@ -827,7 +807,7 @@ meta_frames_queue_draw (MetaFrames *frames,
frame = meta_frames_lookup_window (frames, xwindow);
- invalidate_whole_window (frames, frame);
+ invalidate_whole_window (frame);
}
void
@@ -846,7 +826,7 @@ meta_frames_set_title (MetaFrames *frames,
g_clear_object (&frame->text_layout);
- invalidate_whole_window (frames, frame);
+ invalidate_whole_window (frame);
}
void
@@ -859,8 +839,8 @@ meta_frames_update_frame_style (MetaFrames *frames,
g_assert (frame);
- meta_frames_attach_style (frames, frame);
- invalidate_whole_window (frames, frame);
+ meta_frames_attach_style (frame);
+ invalidate_whole_window (frame);
}
void
@@ -880,14 +860,13 @@ meta_frames_repaint_frame (MetaFrames *frames,
}
static void
-redraw_control (MetaFrames *frames,
- MetaUIFrame *frame,
+redraw_control (MetaUIFrame *frame,
MetaFrameControl control)
{
MetaFrameGeometry fgeom;
GdkRectangle *rect;
- meta_frames_calc_geometry (frames, frame, &fgeom);
+ meta_frames_calc_geometry (frame, &fgeom);
rect = control_rect (control, &fgeom);
@@ -1029,13 +1008,13 @@ meta_frame_right_click_event(MetaUIFrame *frame,
}
static gboolean
-meta_frames_try_grab_op (MetaFrames *frames,
- MetaUIFrame *frame,
+meta_frames_try_grab_op (MetaUIFrame *frame,
MetaGrabOp op,
gdouble grab_x,
gdouble grab_y,
guint32 time)
{
+ MetaFrames *frames = frame->frames;
Display *display;
gboolean ret;
@@ -1106,7 +1085,7 @@ meta_frames_button_press_event (GtkWidget *widget,
if (frame == NULL)
return FALSE;
- control = get_control (frames, frame, event->x, event->y);
+ control = get_control (frame, event->x, event->y);
/* focus on click, even if click was on client area */
if (event->button == 1 &&
@@ -1161,7 +1140,7 @@ meta_frames_button_press_event (GtkWidget *widget,
frame->grab_button = event->button;
frame->button_state = META_BUTTON_STATE_PRESSED;
frame->prelit_control = control;
- redraw_control (frames, frame, control);
+ redraw_control (frame, control);
if (control == META_FRAME_CONTROL_MENU ||
control == META_FRAME_CONTROL_APPMENU)
@@ -1172,7 +1151,7 @@ meta_frames_button_press_event (GtkWidget *widget,
MetaWindowMenuType menu;
int win_x, win_y;
- meta_frames_calc_geometry (frames, frame, &fgeom);
+ meta_frames_calc_geometry (frame, &fgeom);
rect = control_rect (control, &fgeom);
@@ -1245,7 +1224,7 @@ meta_frames_button_press_event (GtkWidget *widget,
break;
}
- meta_frames_try_grab_op (frames, frame, op,
+ meta_frames_try_grab_op (frame, op,
event->x_root, event->y_root,
event->time);
}
@@ -1260,7 +1239,7 @@ meta_frames_button_press_event (GtkWidget *widget,
if (flags & META_FRAME_ALLOWS_MOVE)
{
- meta_frames_try_grab_op (frames, frame,
+ meta_frames_try_grab_op (frame,
META_GRAB_OP_MOVING,
event->x_root, event->y_root,
event->time);
@@ -1345,16 +1324,15 @@ meta_frames_button_release_event (GtkWidget *widget,
* prelit so to let the user know that it can now be pressed.
* :)
*/
- MetaFrameControl control = get_control (frames, frame, event->x, event->y);
- meta_frames_update_prelit_control (frames, frame, control);
+ MetaFrameControl control = get_control (frame, event->x, event->y);
+ meta_frames_update_prelit_control (frame, control);
}
return TRUE;
}
static void
-meta_frames_update_prelit_control (MetaFrames *frames,
- MetaUIFrame *frame,
+meta_frames_update_prelit_control (MetaUIFrame *frame,
MetaFrameControl control)
{
MetaFrameControl old_control;
@@ -1460,8 +1438,8 @@ meta_frames_update_prelit_control (MetaFrames *frames,
frame->button_state = META_BUTTON_STATE_PRELIGHT;
frame->prelit_control = control;
- redraw_control (frames, frame, old_control);
- redraw_control (frames, frame, control);
+ redraw_control (frame, old_control);
+ redraw_control (frame, control);
}
static gboolean
@@ -1479,7 +1457,7 @@ meta_frames_motion_notify_event (GtkWidget *widget,
frames->last_motion_frame = frame;
- control = get_control (frames, frame, event->x, event->y);
+ control = get_control (frame, event->x, event->y);
if (frame->button_state == META_BUTTON_STATE_PRESSED)
{
@@ -1488,13 +1466,13 @@ meta_frames_motion_notify_event (GtkWidget *widget,
if (frame->prelit_control != control)
{
frame->button_state = META_BUTTON_STATE_NORMAL;
- redraw_control (frames, frame, frame->prelit_control);
+ redraw_control (frame, frame->prelit_control);
}
}
else
{
/* Update prelit control and cursor */
- meta_frames_update_prelit_control (frames, frame, control);
+ meta_frames_update_prelit_control (frame, control);
}
if ((event->state & GDK_BUTTON1_MASK) &&
@@ -1605,7 +1583,7 @@ meta_frames_get_mask (MetaFrames *frames,
META_CORE_GET_END);
meta_style_info_set_flags (frame->style_info, flags);
- meta_ui_frame_get_borders (frames, frame, &borders);
+ meta_ui_frame_get_borders (frame, &borders);
gtk_render_background (frame->style_info->styles[META_STYLE_ELEMENT_FRAME], cr,
borders.invisible.left, borders.invisible.top,
width - borders.invisible.left - borders.invisible.right,
@@ -1647,15 +1625,14 @@ meta_frames_draw (GtkWidget *widget,
gdk_cairo_region (cr, region);
cairo_clip (cr);
- meta_frames_paint (frames, frame, cr);
+ meta_frames_paint (frame, cr);
cairo_region_destroy (region);
return TRUE;
}
static void
-meta_frames_paint (MetaFrames *frames,
- MetaUIFrame *frame,
+meta_frames_paint (MetaUIFrame *frame,
cairo_t *cr)
{
MetaFrameFlags flags;
@@ -1727,7 +1704,7 @@ meta_frames_paint (MetaFrames *frames,
META_CORE_GET_CLIENT_HEIGHT, &h,
META_CORE_GET_END);
- meta_frames_ensure_layout (frames, frame, type);
+ meta_frames_ensure_layout (frame, type);
meta_prefs_get_button_layout (&button_layout);
@@ -1760,8 +1737,8 @@ meta_frames_enter_notify_event (GtkWidget *widget,
frame->maybe_ignore_leave_notify = FALSE;
- control = get_control (frames, frame, event->x, event->y);
- meta_frames_update_prelit_control (frames, frame, control);
+ control = get_control (frame, event->x, event->y);
+ meta_frames_update_prelit_control (frame, control);
return TRUE;
}
@@ -1793,7 +1770,7 @@ meta_frames_leave_notify_event (GtkWidget *widget,
if (frame->maybe_ignore_leave_notify)
return FALSE;
- meta_frames_update_prelit_control (frames, frame, META_FRAME_CONTROL_NONE);
+ meta_frames_update_prelit_control (frame, META_FRAME_CONTROL_NONE);
return TRUE;
}
@@ -1872,9 +1849,7 @@ control_rect (MetaFrameControl control,
#define TOP_RESIZE_HEIGHT 4
#define CORNER_SIZE_MULT 2
static MetaFrameControl
-get_control (MetaFrames *frames,
- MetaUIFrame *frame,
- int x, int y)
+get_control (MetaUIFrame *frame, int x, int y)
{
MetaFrameGeometry fgeom;
MetaFrameFlags flags;
@@ -1883,7 +1858,7 @@ get_control (MetaFrames *frames,
gboolean has_north_resize;
cairo_rectangle_int_t client;
- meta_frames_calc_geometry (frames, frame, &fgeom);
+ meta_frames_calc_geometry (frame, &fgeom);
get_client_rect (&fgeom, fgeom.width, fgeom.height, &client);
if (POINT_IN_RECT (x, y, client))
@@ -2027,10 +2002,3 @@ get_control (MetaFrames *frames,
else
return META_FRAME_CONTROL_TITLE;
}
-
-static void
-invalidate_whole_window (MetaFrames *frames,
- MetaUIFrame *frame)
-{
- gdk_window_invalidate_rect (frame->window, NULL, FALSE);
-}
diff --git a/src/ui/frames.h b/src/ui/frames.h
index a625acc..f4a240e 100644
--- a/src/ui/frames.h
+++ b/src/ui/frames.h
@@ -72,6 +72,7 @@ typedef struct _MetaUIFrame MetaUIFrame;
struct _MetaUIFrame
{
+ MetaFrames *frames;
Window xwindow;
GdkWindow *window;
MetaStyleInfo *style_info;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]