diff options
Diffstat (limited to 'src/core/window-props.c')
-rw-r--r-- | src/core/window-props.c | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/src/core/window-props.c b/src/core/window-props.c index 3e870bc6..9aab46ea 100644 --- a/src/core/window-props.c +++ b/src/core/window-props.c @@ -215,12 +215,66 @@ reload_kwm_win_icon (MetaWindow *window, reload_icon (window, window->display->atom__KWM_WIN_ICON); } +static gboolean +gtk_border_equal (GtkBorder *a, + GtkBorder *b) +{ + return (a->left == b->left && + a->right == b->right && + a->top == b->top && + a->bottom == b->bottom); +} + +static void +meta_window_set_custom_frame_extents (MetaWindow *window, + GtkBorder *extents) +{ + if (extents) + { + if (window->has_custom_frame_extents && gtk_border_equal (&window->custom_frame_extents, extents)) + return; + + window->has_custom_frame_extents = TRUE; + window->custom_frame_extents = *extents; + } + else + { + if (!window->has_custom_frame_extents) + return; + + window->has_custom_frame_extents = FALSE; + memset (&window->custom_frame_extents, 0, sizeof (window->custom_frame_extents)); + } + + meta_window_queue (window, META_QUEUE_MOVE_RESIZE); +} + static void reload_gtk_frame_extents (MetaWindow *window, MetaPropValue *value, gboolean initial) { - return; + if (value->type != META_PROP_VALUE_INVALID) + { + if (value->v.cardinal_list.n_cardinals != 4) + { + meta_verbose ("_GTK_FRAME_EXTENTS on %s has %d values instead of 4\n", + window->desc, value->v.cardinal_list.n_cardinals); + } + else + { + GtkBorder extents; + extents.left = (int)value->v.cardinal_list.cardinals[0]; + extents.right = (int)value->v.cardinal_list.cardinals[1]; + extents.top = (int)value->v.cardinal_list.cardinals[2]; + extents.bottom = (int)value->v.cardinal_list.cardinals[3]; + meta_window_set_custom_frame_extents (window, &extents); + } + } + else + { + meta_window_set_custom_frame_extents (window, NULL); + } } static void |