summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mate-panel/button-widget.c38
1 files changed, 34 insertions, 4 deletions
diff --git a/mate-panel/button-widget.c b/mate-panel/button-widget.c
index 00753b99..d306e494 100644
--- a/mate-panel/button-widget.c
+++ b/mate-panel/button-widget.c
@@ -34,10 +34,13 @@ struct _ButtonWidgetPrivate {
guint arrow : 1;
guint dnd_highlight : 1;
gboolean needs_move;
+
+ gulong scale_changed_handler;
};
static void button_widget_icon_theme_changed (ButtonWidget *button);
static void button_widget_reload_surface (ButtonWidget *button);
+static void button_widget_on_scale_changed (GtkWidget *widget, GParamSpec *pspec, gpointer user_data);
enum {
PROP_0,
@@ -118,29 +121,43 @@ make_hc_surface (cairo_surface_t *surface)
static void
button_widget_realize(GtkWidget *widget)
{
+ ButtonWidget *button = BUTTON_WIDGET (widget);
+
gtk_widget_add_events (widget, GDK_POINTER_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK |
GDK_KEY_PRESS_MASK);
GTK_WIDGET_CLASS (button_widget_parent_class)->realize (widget);
- BUTTON_WIDGET (widget)->priv->icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (widget));
- g_signal_connect_object (BUTTON_WIDGET (widget)->priv->icon_theme,
+ button->priv->icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (widget));
+ g_signal_connect_object (button->priv->icon_theme,
"changed",
G_CALLBACK (button_widget_icon_theme_changed),
widget,
G_CONNECT_SWAPPED);
- button_widget_reload_surface (BUTTON_WIDGET (widget));
+ button->priv->scale_changed_handler = g_signal_connect (widget,
+ "notify::scale-factor",
+ G_CALLBACK (button_widget_on_scale_changed),
+ NULL);
+
+ button_widget_reload_surface (button);
}
static void
button_widget_unrealize (GtkWidget *widget)
{
- g_signal_handlers_disconnect_by_func (BUTTON_WIDGET (widget)->priv->icon_theme,
+ ButtonWidget *button = BUTTON_WIDGET (widget);
+
+ g_signal_handlers_disconnect_by_func (button->priv->icon_theme,
G_CALLBACK (button_widget_icon_theme_changed),
widget);
+ if (button->priv->scale_changed_handler) {
+ g_signal_handler_disconnect (widget, button->priv->scale_changed_handler);
+ button->priv->scale_changed_handler = 0;
+ }
+
GTK_WIDGET_CLASS (button_widget_parent_class)->unrealize (widget);
}
@@ -236,6 +253,17 @@ button_widget_icon_theme_changed (ButtonWidget *button)
}
static void
+button_widget_on_scale_changed (GtkWidget *widget,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ ButtonWidget *button = BUTTON_WIDGET (widget);
+
+ /* Reload surfaces at the new scale factor */
+ button_widget_reload_surface (button);
+}
+
+static void
button_widget_finalize (GObject *object)
{
ButtonWidget *button = (ButtonWidget *) object;
@@ -656,6 +684,8 @@ button_widget_init (ButtonWidget *button)
button->priv->ignore_leave = FALSE;
button->priv->arrow = FALSE;
button->priv->dnd_highlight = FALSE;
+
+ button->priv->scale_changed_handler = 0;
}
static void