[gnome-panel] move background handling from PanelWidget to PanelToplevel



commit 47741777c3115b9700fd762ab7543a81d2ed92dc
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Fri Feb 19 14:52:10 2016 +0200

    move background handling from PanelWidget to PanelToplevel
    
    There are cases when PanelWidget width is not equal to PanelToplevel
    width. After this commit panel has also correct background under
    panel hide buttons (if enabled).

 data/theme/Adwaita/gnome-panel-dark.css |    2 +-
 data/theme/Adwaita/gnome-panel.css      |    2 +-
 data/theme/HighContrast/gnome-panel.css |    2 +-
 gnome-panel/panel-applet-frame.c        |    6 +-
 gnome-panel/panel-toplevel.c            |  138 ++++++++++++++++++++++++++--
 gnome-panel/panel-toplevel.h            |    3 +
 gnome-panel/panel-widget.c              |  149 +++----------------------------
 gnome-panel/panel-widget.h              |    6 +-
 gnome-panel/panel.c                     |    2 +-
 9 files changed, 155 insertions(+), 155 deletions(-)
---
diff --git a/data/theme/Adwaita/gnome-panel-dark.css b/data/theme/Adwaita/gnome-panel-dark.css
index d371997..ec872eb 100644
--- a/data/theme/Adwaita/gnome-panel-dark.css
+++ b/data/theme/Adwaita/gnome-panel-dark.css
@@ -1,4 +1,4 @@
-panel-widget {
+panel-toplevel {
   background-color: #393f3f;
 }
 
diff --git a/data/theme/Adwaita/gnome-panel.css b/data/theme/Adwaita/gnome-panel.css
index fc15adb..2afd342 100644
--- a/data/theme/Adwaita/gnome-panel.css
+++ b/data/theme/Adwaita/gnome-panel.css
@@ -1,4 +1,4 @@
-panel-widget {
+panel-toplevel {
   background-color: #e8e8e7;
 }
 
diff --git a/data/theme/HighContrast/gnome-panel.css b/data/theme/HighContrast/gnome-panel.css
index 6cc32ff..e99b568 100644
--- a/data/theme/HighContrast/gnome-panel.css
+++ b/data/theme/HighContrast/gnome-panel.css
@@ -1,4 +1,4 @@
-panel-widget {
+panel-toplevel {
   background-color: #ffffff;
 }
 
diff --git a/gnome-panel/panel-applet-frame.c b/gnome-panel/panel-applet-frame.c
index 2717db4..91460dc 100644
--- a/gnome-panel/panel-applet-frame.c
+++ b/gnome-panel/panel-applet-frame.c
@@ -117,7 +117,7 @@ panel_applet_frame_draw (GtkWidget *widget,
        gtk_style_context_get (context, state,
                               "background-image", &bg_pattern,
                               NULL);
-       background = &frame->priv->panel->background;
+       background = &frame->priv->panel->toplevel->background;
 
        if (bg_pattern && (background->type == PANEL_BACK_IMAGE ||
            (background->type == PANEL_BACK_COLOR && background->has_alpha))) {
@@ -237,7 +237,7 @@ change_background (PanelAppletFrame *frame,
            old->height == new->height)
                return;
 
-       type = frame->priv->panel->background.type;
+       type = frame->priv->panel->toplevel->background.type;
 
        PANEL_APPLET_FRAME_GET_CLASS (frame)->change_background (frame,
                                                                 type);
@@ -643,7 +643,7 @@ _panel_applet_frame_get_background_string (PanelAppletFrame    *frame,
                }
        }
 
-       return panel_background_make_string (&panel->background, x, y);
+       return panel_background_make_string (&panel->toplevel->background, x, y);
 }
 
 static void
diff --git a/gnome-panel/panel-toplevel.c b/gnome-panel/panel-toplevel.c
index 8da550a..9164b4f 100644
--- a/gnome-panel/panel-toplevel.c
+++ b/gnome-panel/panel-toplevel.c
@@ -1522,7 +1522,7 @@ panel_toplevel_update_edges (PanelToplevel *toplevel)
 
        edges = PANEL_EDGE_NONE;
 
-       background = &toplevel->priv->panel_widget->background;
+       background = &toplevel->background;
 
        /* We don't want any bevels with a color/image background */
        if (panel_background_effective_type (background) == PANEL_BACK_NONE) {
@@ -2150,7 +2150,7 @@ panel_toplevel_update_position (PanelToplevel *toplevel)
         * x = 1 => outer bevel => x = 0 => no outer bevel = > x = 1 => ...
         * FIXME: maybe the real bug is that we enter into this loop (see bug
         * #160748 to learn how to reproduce.) */
-       background = &toplevel->priv->panel_widget->background;
+       background = &toplevel->background;
        /* There's no bevels with a color/image background */
        if (panel_background_effective_type (background) == PANEL_BACK_NONE) {
                GtkStyleContext *context;
@@ -2558,6 +2558,38 @@ panel_toplevel_initially_hide (PanelToplevel *toplevel)
 }
 
 static void
+set_background_default_style (GtkWidget *widget)
+{
+       PanelToplevel *toplevel;
+       GtkStyleContext *context;
+       GtkStateFlags state;
+       GdkRGBA *bg_color;
+       cairo_pattern_t *bg_image;
+
+       if (!gtk_widget_get_realized (widget))
+               return;
+
+       toplevel = PANEL_TOPLEVEL (widget);
+
+       context = gtk_widget_get_style_context (widget);
+       state = gtk_style_context_get_state (context);
+
+       gtk_style_context_get (context, state,
+                              "background-color", &bg_color,
+                              "background-image", &bg_image,
+                              NULL);
+
+       panel_background_set_default_style (&toplevel->background,
+                                           bg_color, bg_image);
+
+       if (bg_color)
+               gdk_rgba_free (bg_color);
+
+       if (bg_image)
+               cairo_pattern_destroy (bg_image);
+}
+
+static void
 panel_toplevel_realize (GtkWidget *widget)
 {
        PanelToplevel *toplevel = (PanelToplevel *) widget;
@@ -2571,6 +2603,9 @@ panel_toplevel_realize (GtkWidget *widget)
 
        window = gtk_widget_get_window (widget);
 
+       set_background_default_style (widget);
+       panel_background_realized (&toplevel->background, window);
+
        panel_struts_set_window_hint (toplevel);
 
        gdk_window_set_group (window, window);
@@ -2600,10 +2635,14 @@ panel_toplevel_disconnect_timeouts (PanelToplevel *toplevel)
 static void
 panel_toplevel_unrealize (GtkWidget *widget)
 {
-       panel_toplevel_disconnect_timeouts (PANEL_TOPLEVEL (widget));
+       PanelToplevel *toplevel;
 
-       if (GTK_WIDGET_CLASS (panel_toplevel_parent_class)->unrealize)
-               GTK_WIDGET_CLASS (panel_toplevel_parent_class)->unrealize (widget);
+       toplevel = PANEL_TOPLEVEL (widget);
+
+       panel_toplevel_disconnect_timeouts (toplevel);
+       panel_background_unrealized (&toplevel->background);
+
+       GTK_WIDGET_CLASS (panel_toplevel_parent_class)->unrealize (widget);
 }
 
 static void
@@ -2704,6 +2743,37 @@ panel_toplevel_get_preferred_height(GtkWidget *widget, gint *minimal_height, gin
 }
 
 static void
+set_background_region (PanelToplevel *toplevel)
+{
+       GtkWidget *widget;
+       GdkWindow *window;
+       gint origin_x;
+       gint origin_y;
+       GtkAllocation allocation;
+       GtkOrientation orientation;
+
+       widget = GTK_WIDGET (toplevel);
+
+       if (!gtk_widget_get_realized (widget))
+               return;
+
+       window = gtk_widget_get_window (widget);
+       origin_x = -1;
+       origin_y = -1;
+
+       gdk_window_get_origin (window, &origin_x, &origin_y);
+       gtk_widget_get_allocation (widget, &allocation);
+
+       orientation = GTK_ORIENTATION_HORIZONTAL;
+       if (toplevel->priv->orientation & PANEL_VERTICAL_MASK)
+               orientation = GTK_ORIENTATION_VERTICAL;
+
+       panel_background_change_region (&toplevel->background, orientation,
+                                       origin_x, origin_y,
+                                       allocation.width, allocation.height);
+}
+
+static void
 panel_toplevel_size_allocate (GtkWidget     *widget,
                              GtkAllocation *allocation)
 {
@@ -2774,6 +2844,8 @@ panel_toplevel_size_allocate (GtkWidget     *widget,
 
        if (child && gtk_widget_get_visible (child))
                gtk_widget_size_allocate (child, &challoc);
+
+       set_background_region (toplevel);
 }
 
 static gboolean
@@ -2936,6 +3008,19 @@ panel_toplevel_button_release_event (GtkWidget      *widget,
 }
 
 static gboolean
+panel_toplevel_configure_event (GtkWidget        *widget,
+                               GdkEventConfigure *event)
+{
+       PanelToplevel *toplevel;
+
+       toplevel = PANEL_TOPLEVEL (widget);
+
+       set_background_region (toplevel);
+
+       return GDK_EVENT_PROPAGATE;
+}
+
+static gboolean
 panel_toplevel_key_press_event (GtkWidget   *widget,
                                GdkEventKey *event)
 {
@@ -3412,6 +3497,16 @@ panel_toplevel_focus_out_event (GtkWidget     *widget,
 }
 
 static void
+panel_toplevel_state_flags_changed (GtkWidget     *widget,
+                                    GtkStateFlags  previous_state)
+{
+       GTK_WIDGET_CLASS (panel_toplevel_parent_class)->state_flags_changed (widget,
+                                                                            previous_state);
+
+       set_background_default_style (widget);
+}
+
+static void
 panel_toplevel_style_updated (GtkWidget *widget)
 {
        PanelToplevel *toplevel = PANEL_TOPLEVEL (widget);
@@ -3421,6 +3516,8 @@ panel_toplevel_style_updated (GtkWidget *widget)
        if (GTK_WIDGET_CLASS (panel_toplevel_parent_class)->style_updated)
                GTK_WIDGET_CLASS (panel_toplevel_parent_class)->style_updated (widget);
 
+       set_background_default_style (widget);
+
        panel_widget_set_size (toplevel->priv->panel_widget, toplevel->priv->size);
 }
 
@@ -3708,6 +3805,8 @@ panel_toplevel_finalize (GObject *object)
        panel_toplevel_disconnect_gtk_settings (toplevel);
        toplevel->priv->gtk_settings = NULL;
 
+       panel_background_free (&toplevel->background);
+
        if (toplevel->priv->description)
                g_free (toplevel->priv->description);
        toplevel->priv->description = NULL;
@@ -3765,6 +3864,7 @@ panel_toplevel_class_init (PanelToplevelClass *klass)
        widget_class->draw                 = panel_toplevel_draw;
        widget_class->button_press_event   = panel_toplevel_button_press_event;
        widget_class->button_release_event = panel_toplevel_button_release_event;
+       widget_class->configure_event      = panel_toplevel_configure_event;
        widget_class->key_press_event      = panel_toplevel_key_press_event;
        widget_class->motion_notify_event  = panel_toplevel_motion_notify_event;
        widget_class->enter_notify_event   = panel_toplevel_enter_notify_event;
@@ -3772,6 +3872,7 @@ panel_toplevel_class_init (PanelToplevelClass *klass)
        widget_class->screen_changed       = panel_toplevel_screen_changed;
        widget_class->focus_in_event       = panel_toplevel_focus_in_event;
        widget_class->focus_out_event      = panel_toplevel_focus_out_event;
+       widget_class->state_flags_changed  = panel_toplevel_state_flags_changed;
        widget_class->style_updated        = panel_toplevel_style_updated;
 
        container_class->check_resize = panel_toplevel_check_resize;
@@ -4111,6 +4212,8 @@ panel_toplevel_class_init (PanelToplevelClass *klass)
        gtk_binding_entry_add_signal (binding_set, GDK_KEY_F10, GDK_CONTROL_MASK,
                                      "popup_panel_menu", 0);
 
+       gtk_widget_class_set_css_name (widget_class, "panel-toplevel");
+
        panel_bindings_set_entries (binding_set);
 }
 
@@ -4159,8 +4262,17 @@ panel_toplevel_setup_widgets (PanelToplevel *toplevel)
 }
 
 static void
+background_changed (PanelBackground *background,
+                    PanelToplevel   *toplevel)
+{
+       panel_toplevel_update_edges (toplevel);
+       panel_widget_emit_background_changed (toplevel->priv->panel_widget);
+}
+
+static void
 panel_toplevel_init (PanelToplevel *toplevel)
 {
+       GtkWidget *widget;
        GtkStyleContext *context;
 
        toplevel->priv = PANEL_TOPLEVEL_GET_PRIVATE (toplevel);
@@ -4241,13 +4353,17 @@ panel_toplevel_init (PanelToplevel *toplevel)
        toplevel->priv->updated_geometry_initial = FALSE;
        toplevel->priv->initial_animation_done   = FALSE;
 
-       gtk_widget_add_events (GTK_WIDGET (toplevel),
+       widget = GTK_WIDGET (toplevel);
+
+       gtk_widget_add_events (widget,
                               GDK_BUTTON_PRESS_MASK |
                               GDK_BUTTON_RELEASE_MASK |
                               GDK_POINTER_MOTION_MASK |
                               GDK_ENTER_NOTIFY_MASK |
                               GDK_LEAVE_NOTIFY_MASK);
 
+       gtk_widget_set_app_paintable (widget, TRUE);
+
        panel_toplevel_setup_widgets (toplevel);
        panel_toplevel_update_description (toplevel);
        panel_toplevel_update_gtk_settings (toplevel);
@@ -4264,6 +4380,10 @@ panel_toplevel_init (PanelToplevel *toplevel)
 
        context = gtk_widget_get_style_context (GTK_WIDGET (toplevel));
        gtk_style_context_add_class (context, GTK_STYLE_CLASS_HORIZONTAL);
+
+       panel_background_init (&toplevel->background,
+                              (PanelBackgroundChangedNotify) background_changed,
+                              toplevel);
 }
 
 PanelWidget *
@@ -4491,10 +4611,8 @@ panel_toplevel_set_settings_path (PanelToplevel *toplevel,
 
        settings_background = g_settings_get_child (toplevel->priv->settings,
                                                    PANEL_BACKGROUND_SCHEMA_CHILD);
-       /* FIXME: ideally, move this inside panel-widget.c since we're not
-        * supposed to know about the backgrounds here */
-       panel_background_settings_init (&toplevel->priv->panel_widget->background,
-                                       settings_background);
+
+       panel_background_settings_init (&toplevel->background, settings_background);
        g_object_unref (settings_background);
 }
 
diff --git a/gnome-panel/panel-toplevel.h b/gnome-panel/panel-toplevel.h
index 037823b..1753d16 100644
--- a/gnome-panel/panel-toplevel.h
+++ b/gnome-panel/panel-toplevel.h
@@ -25,6 +25,7 @@
 
 #include <gtk/gtk.h>
 
+#include "panel-background.h"
 #include "panel-enums.h"
 
 G_BEGIN_DECLS
@@ -50,6 +51,8 @@ typedef struct _PanelToplevelPrivate PanelToplevelPrivate;
 struct _PanelToplevel {
        GtkWindow              window_instance;
 
+       PanelBackground        background;
+
        PanelToplevelPrivate  *priv;
 };
 
diff --git a/gnome-panel/panel-widget.c b/gnome-panel/panel-widget.c
index da9b57a..88e9fad 100644
--- a/gnome-panel/panel-widget.c
+++ b/gnome-panel/panel-widget.c
@@ -70,13 +70,6 @@ static void panel_widget_cremove              (GtkContainer     *container,
 static void panel_widget_dispose              (GObject          *obj);
 static void panel_widget_finalize             (GObject          *obj);
 static void panel_widget_realize              (GtkWidget        *widget);
-static void panel_widget_unrealize            (GtkWidget        *panel);
-static void panel_widget_state_flags_changed  (GtkWidget        *widget,
-                                              GtkStateFlags     previous_state);
-static void panel_widget_style_updated        (GtkWidget        *widget);
-
-static void panel_widget_background_changed (PanelBackground *background,
-                                            PanelWidget     *panel);
 
 static void panel_widget_push_move_applet   (PanelWidget      *panel,
                                              GtkDirectionType  dir);
@@ -387,15 +380,10 @@ panel_widget_class_init (PanelWidgetClass *class)
        widget_class->get_preferred_height = panel_widget_get_preferred_height;
        widget_class->size_allocate = panel_widget_size_allocate;
        widget_class->realize = panel_widget_realize;
-       widget_class->unrealize = panel_widget_unrealize;
        widget_class->focus = panel_widget_real_focus;
-       widget_class->state_flags_changed = panel_widget_state_flags_changed;
-       widget_class->style_updated = panel_widget_style_updated;
 
        container_class->add = panel_widget_cadd;
        container_class->remove = panel_widget_cremove;
-
-       gtk_widget_class_set_css_name (widget_class, "panel-widget");
 }
 
 static void
@@ -1323,29 +1311,6 @@ queue_resize_on_all_applets(PanelWidget *panel)
 }
 
 static void
-panel_widget_set_background_region (PanelWidget *panel)
-{
-       GtkWidget     *widget;
-       int            origin_x = -1, origin_y = -1;
-       GtkAllocation  allocation;
-
-       widget = GTK_WIDGET (panel);
-
-       if (!gtk_widget_get_realized (widget))
-               return;
-
-       gdk_window_get_origin (gtk_widget_get_window (widget), &origin_x, &origin_y);
-
-       gtk_widget_get_allocation (widget, &allocation);
-
-       panel_background_change_region (
-               &panel->background, panel->orient,
-               origin_x, origin_y,
-               allocation.width,
-               allocation.height);
-}
-
-static void
 panel_widget_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
 {
        PanelWidget *panel;
@@ -1496,8 +1461,6 @@ panel_widget_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
                        gtk_widget_size_allocate(ad->applet,&challoc);
                }
        }
-
-       panel_widget_set_background_region (panel);
 }
 
 gboolean
@@ -1536,91 +1499,20 @@ panel_widget_is_cursor(PanelWidget *panel, int overlap)
 }
 
 static void
-panel_widget_set_background_default_style (GtkWidget *widget)
-{
-       GtkStyleContext *context;
-       GtkStateFlags    state;
-       GdkRGBA         *bg_color;
-       cairo_pattern_t *bg_image;
-       PanelBackground *background;
-
-       if (gtk_widget_get_realized (widget)) {
-               context = gtk_widget_get_style_context (widget);
-               state = gtk_widget_get_state_flags (widget);
-               background = &PANEL_WIDGET (widget)->background;
-
-               gtk_style_context_get (context, state,
-                                      "background-color", &bg_color,
-                                      "background-image", &bg_image,
-                                      NULL);
-
-               panel_background_set_default_style (background,
-                                                   bg_color,
-                                                   bg_image);
-
-               if (bg_image)
-                       cairo_pattern_destroy (bg_image);
-       }
-}
-
-static void
-panel_widget_style_updated (GtkWidget *widget)
-{
-        GTK_WIDGET_CLASS (panel_widget_parent_class)->style_updated (widget);
-        panel_widget_set_background_default_style (widget);
-}
-
-static void
-panel_widget_state_flags_changed (GtkWidget    *widget,
-                                  GtkStateFlags previous_state)
-{
-        GTK_WIDGET_CLASS (panel_widget_parent_class)->state_flags_changed (widget, previous_state);
-        panel_widget_set_background_default_style (widget);
-}
-
-static gboolean
-toplevel_configure_event (GtkWidget         *widget,
-                         GdkEventConfigure *event,
-                         PanelWidget       *panel)
-{
-       panel_widget_set_background_region (panel);
-
-       return FALSE;
-}
-
-static void
 panel_widget_realize (GtkWidget *widget)
 {
-       PanelWidget     *panel = (PanelWidget *) widget;
-       GdkWindow       *window;
-
-       g_signal_connect (panel->toplevel, "configure-event",
-                         G_CALLBACK (toplevel_configure_event), panel);
+       GdkScreen *screen;
+       GdkVisual *visual;
 
-       GTK_WIDGET_CLASS (panel_widget_parent_class)->realize (widget);
-
-       window = gtk_widget_get_window (widget);
-       /* For auto-hidden panels with a colored background, we need native
-        * windows to avoid some uglyness on unhide */
-       gdk_window_ensure_native (window);
-
-        panel_widget_set_background_default_style (widget);
-       panel_background_realized (&panel->background, window);
-}
-
-static void
-panel_widget_unrealize (GtkWidget *widget)
-{
-       PanelWidget *panel = (PanelWidget *) widget;
+       screen = gtk_widget_get_screen (widget);
+       visual = gdk_screen_get_rgba_visual (screen);
 
-       panel_background_unrealized (&panel->background);
+       if (visual == NULL)
+               visual = gdk_screen_get_system_visual (screen);
 
-       g_signal_handlers_disconnect_by_func (
-               panel->toplevel,
-               G_CALLBACK (toplevel_configure_event),
-               panel);
+       gtk_widget_set_visual (widget, visual);
 
-       GTK_WIDGET_CLASS (panel_widget_parent_class)->unrealize (widget);
+       GTK_WIDGET_CLASS (panel_widget_parent_class)->realize (widget);
 }
 
 static void
@@ -1632,8 +1524,6 @@ panel_widget_finalize (GObject *obj)
 
        panel = PANEL_WIDGET (obj);
 
-       panel_background_free (&panel->background);
-
        if (panel->applets_hints != NULL)
                g_free (panel->applets_hints);
        panel->applets_hints = NULL;
@@ -1641,7 +1531,6 @@ panel_widget_finalize (GObject *obj)
                g_free (panel->applets_using_hint);
        panel->applets_using_hint = NULL;
 
-
        G_OBJECT_CLASS (panel_widget_parent_class)->finalize (obj);
 }
 
@@ -1708,10 +1597,6 @@ panel_widget_init (PanelWidget *panel)
        context = gtk_widget_get_style_context (widget);
        gtk_style_context_add_class (context, GTK_STYLE_CLASS_HORIZONTAL);
 
-       panel_background_init (&panel->background,
-                              (PanelBackgroundChangedNotify) panel_widget_background_changed,
-                              panel);
-
        panels = g_slist_append (panels, panel);
 }
 
@@ -2545,7 +2430,6 @@ panel_widget_set_orientation (PanelWidget    *panel_widget,
                gtk_style_context_add_class (context, GTK_STYLE_CLASS_VERTICAL);
                gtk_style_context_remove_class (context, GTK_STYLE_CLASS_HORIZONTAL);
        }
-       panel_widget_style_updated (GTK_WIDGET (panel_widget));
 
        gtk_widget_queue_resize (GTK_WIDGET (panel_widget));
 }
@@ -2565,17 +2449,6 @@ panel_widget_set_size (PanelWidget *panel_widget,
        gtk_widget_queue_resize (GTK_WIDGET (panel_widget));
 }
 
-static void
-panel_widget_background_changed (PanelBackground *background,
-                                PanelWidget     *panel)
-{
-       g_return_if_fail (PANEL_IS_WIDGET (panel));
-       panel_toplevel_update_edges (panel->toplevel);
-       g_signal_emit (G_OBJECT (panel),
-                      panel_widget_signals [BACK_CHANGE_SIGNAL],
-                      0);
-}
-
 static void 
 panel_widget_push_move_applet (PanelWidget     *panel,
                                GtkDirectionType dir)
@@ -2818,3 +2691,9 @@ panel_widget_register_open_dialog (PanelWidget *panel,
                                 panel,
                                 G_CONNECT_SWAPPED);
 }
+
+void
+panel_widget_emit_background_changed (PanelWidget *panel)
+{
+       g_signal_emit (panel, panel_widget_signals [BACK_CHANGE_SIGNAL], 0);
+}
diff --git a/gnome-panel/panel-widget.h b/gnome-panel/panel-widget.h
index 7860fb7..05c0598 100644
--- a/gnome-panel/panel-widget.h
+++ b/gnome-panel/panel-widget.h
@@ -14,7 +14,6 @@
 #include <gdk-pixbuf/gdk-pixbuf.h>
 #include "button-widget.h"
 #include "panel-types.h"
-#include "panel-background.h"
 #include "panel-toplevel.h"
 
 G_BEGIN_DECLS
@@ -87,8 +86,6 @@ struct _PanelWidget
        AppletData     *currently_dragged_applet;
        guint           dragged_state;
 
-       PanelBackground background;
-
        GtkWidget      *drop_widget;     /* widget that the panel checks for
                                          * the cursor on drops usually the
                                          * panel widget itself
@@ -205,6 +202,9 @@ void     panel_widget_set_applet_size_hints       (PanelWidget *panel,
 
 void     panel_widget_register_open_dialog        (PanelWidget *panel,
                                                   GtkWidget   *dialog);  
+
+void     panel_widget_emit_background_changed     (PanelWidget *panel);
+
 G_END_DECLS
 
 #endif /* PANEL_WIDGET_H */
diff --git a/gnome-panel/panel.c b/gnome-panel/panel.c
index 69319ec..a608537 100644
--- a/gnome-panel/panel.c
+++ b/gnome-panel/panel.c
@@ -118,7 +118,7 @@ back_change (AppletInfo  *info,
        switch (info->type) {
        case PANEL_OBJECT_APPLET:
                frame = PANEL_APPLET_FRAME (info->widget);
-               type = panel->background.type;
+               type = panel->toplevel->background.type;
 
                PANEL_APPLET_FRAME_GET_CLASS (frame)->change_background (frame, type);
                break;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]