diff options
author | infirit <[email protected]> | 2014-11-22 18:30:38 +0100 |
---|---|---|
committer | infirit <[email protected]> | 2014-11-22 18:43:04 +0100 |
commit | 232713d42e79c519cfb060bb286e4cd600678559 (patch) | |
tree | 10f856f9c23aef8c83a107f457f6864b548f5e2c /mate-panel/panel-frame.c | |
parent | 1b0b03e09e3910280c1734475f0b0ac4122fcfca (diff) | |
download | mate-panel-232713d42e79c519cfb060bb286e4cd600678559.tar.bz2 mate-panel-232713d42e79c519cfb060bb286e4cd600678559.tar.xz |
Gtk3: Sync get_preferred_width/height() usage with gnome-panel
Even tough it works it makes taking code (eg StyleContext)
from gnome-panel much easier.
Also fixes a bug where applets are not drawn when moved/added.
Diffstat (limited to 'mate-panel/panel-frame.c')
-rw-r--r-- | mate-panel/panel-frame.c | 96 |
1 files changed, 71 insertions, 25 deletions
diff --git a/mate-panel/panel-frame.c b/mate-panel/panel-frame.c index 7602a724..224a00b8 100644 --- a/mate-panel/panel-frame.c +++ b/mate-panel/panel-frame.c @@ -35,6 +35,77 @@ enum { PROP_EDGES }; +#if GTK_CHECK_VERSION (3, 0, 0) +static void +panel_frame_get_preferred_width (GtkWidget *widget, + gint *minimal_width, + gint *natural_width) +{ + PanelFrame *frame = (PanelFrame *) widget; + GtkBin *bin = (GtkBin *) widget; + GtkStyle *style; + GtkWidget *child; + int border_width; + + style = gtk_widget_get_style (widget); + border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); + + *minimal_width = 1; + *natural_width = 1; + + child = gtk_bin_get_child (bin); + if (child && gtk_widget_get_visible (child)) + gtk_widget_get_preferred_width (child, minimal_width, natural_width); + + *minimal_width += border_width; + *natural_width += border_width; + + if (frame->edges & PANEL_EDGE_LEFT) { + *minimal_width += style->ythickness; + *natural_width += style->ythickness; + } + if (frame->edges & PANEL_EDGE_RIGHT) { + *minimal_width += style->ythickness; + *natural_width += style->ythickness; + } +} + +static void +panel_frame_get_preferred_height (GtkWidget *widget, + gint *minimal_height, + gint *natural_height) +{ + PanelFrame *frame = (PanelFrame *) widget; + GtkBin *bin = (GtkBin *) widget; + GtkStyle *style; + GtkWidget *child; + int border_width; + + style = gtk_widget_get_style (widget); + border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); + + *minimal_height = 1; + *natural_height = 1; + + child = gtk_bin_get_child (bin); + if (child && gtk_widget_get_visible (child)) + gtk_widget_get_preferred_height (child, minimal_height, natural_height); + + *minimal_height += border_width; + *natural_height += border_width; + + + if (frame->edges & PANEL_EDGE_TOP) { + *minimal_height += style->xthickness; + *natural_height += style->xthickness; + } + if (frame->edges & PANEL_EDGE_BOTTOM) { + *minimal_height += style->xthickness; + *natural_height += style->xthickness; + } +} + +#else static void panel_frame_size_request (GtkWidget *widget, GtkRequisition *requisition) @@ -53,11 +124,7 @@ panel_frame_size_request (GtkWidget *widget, child = gtk_bin_get_child (bin); if (child && gtk_widget_get_visible (child)) -#if GTK_CHECK_VERSION (3, 0, 0) - gtk_widget_get_preferred_size (child, requisition, NULL); -#else gtk_widget_size_request (child, requisition); -#endif requisition->width += border_width; requisition->height += border_width; @@ -71,27 +138,6 @@ panel_frame_size_request (GtkWidget *widget, if (frame->edges & PANEL_EDGE_RIGHT) requisition->width += style->ythickness; } - -#if GTK_CHECK_VERSION (3, 0, 0) -static void -panel_frame_get_preferred_width (GtkWidget *widget, - gint *minimum_width, - gint *natural_width) -{ - GtkRequisition req; - panel_frame_size_request (widget, &req); - *minimum_width = *natural_width = req.width; -} - -static void -panel_frame_get_preferred_height (GtkWidget *widget, - gint *minimum_height, - gint *natural_height) -{ - GtkRequisition req; - panel_frame_size_request (widget, &req); - *minimum_height = *natural_height = req.height; -} #endif static void |