[Xfce4-commits] <ristretto:master> Re-enable the style combo in the xfce set-wallpaper dialog

Stephan Arts noreply at xfce.org
Wed Sep 14 10:00:01 CEST 2011


Updating branch refs/heads/master
         to c378abf122b580e658f98109e5a90a16ec6b6692 (commit)
       from 20d2e742ef8dda6236c851258b815116b67842f9 (commit)

commit c378abf122b580e658f98109e5a90a16ec6b6692
Author: Stephan Arts <stephan at xfce.org>
Date:   Wed Sep 14 09:28:46 2011 +0200

    Re-enable the style combo in the xfce set-wallpaper dialog
    
    Apply several fixes to enable the style-combo

 src/monitor_chooser.c        |   50 +++++++++++++++++-
 src/monitor_chooser.h        |   19 ++++++-
 src/xfce_wallpaper_manager.c |  123 +++++++++++++++++++++++++++++++-----------
 3 files changed, 158 insertions(+), 34 deletions(-)

diff --git a/src/monitor_chooser.c b/src/monitor_chooser.c
index c1be5ba..c83c9f5 100644
--- a/src/monitor_chooser.c
+++ b/src/monitor_chooser.c
@@ -28,6 +28,7 @@ typedef struct {
     gint width;
     gint height;
     GdkPixbuf *pixbuf;
+    RsttoMonitorStyle style;
 } Monitor;
 
 struct _RsttoMonitorChooserPriv
@@ -71,6 +72,15 @@ paint_monitor ( cairo_t *cr,
                 Monitor *monitor,
                 gboolean active);
 
+enum
+{
+    RSTTO_MONITOR_CHOOSER_SIGNAL_CHANGED = 0,
+    RSTTO_MONITOR_CHOOSER_SIGNAL_COUNT
+};
+
+static gint
+rstto_monitor_chooser_signals[RSTTO_MONITOR_CHOOSER_SIGNAL_COUNT];
+
 GType
 rstto_monitor_chooser_get_type (void)
 {
@@ -131,6 +141,17 @@ rstto_monitor_chooser_class_init(RsttoMonitorChooserClass *chooser_class)
     widget_class->size_allocate = rstto_monitor_chooser_size_allocate;
 
     object_class->finalize = rstto_monitor_chooser_finalize;
+
+    rstto_monitor_chooser_signals[RSTTO_MONITOR_CHOOSER_SIGNAL_CHANGED] = g_signal_new("changed",
+            G_TYPE_FROM_CLASS(chooser_class),
+            G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+            0,
+            NULL,
+            NULL,
+            g_cclosure_marshal_VOID__VOID,
+            G_TYPE_NONE,
+            0,
+            NULL);
 }
 
 static void
@@ -480,7 +501,9 @@ rstto_monitor_chooser_set_pixbuf (
 }
 
 static void
-cb_rstto_button_press_event (GtkWidget *widget, GdkEventButton *event)
+cb_rstto_button_press_event (
+        GtkWidget *widget,
+        GdkEventButton *event )
 {
     RsttoMonitorChooser *chooser = RSTTO_MONITOR_CHOOSER(widget);
     gint row_width = 0;
@@ -520,9 +543,34 @@ cb_rstto_button_press_event (GtkWidget *widget, GdkEventButton *event)
                     chooser->priv->selected = id+1;
                 }
 
+                g_signal_emit (G_OBJECT (chooser), rstto_monitor_chooser_signals[RSTTO_MONITOR_CHOOSER_SIGNAL_CHANGED], 0, NULL);
+
                 rstto_monitor_chooser_paint (widget);
             }
         }
 
     }
 }
+
+gint
+rstto_monitor_chooser_get_selected (
+        RsttoMonitorChooser *chooser )
+{
+    return chooser->priv->selected;
+}
+
+gboolean
+rstto_monitor_chooser_set_style (
+        RsttoMonitorChooser *chooser,
+        gint monitor_id,
+        RsttoMonitorStyle style )
+{
+    Monitor *monitor = g_slist_nth_data (chooser->priv->monitors, monitor_id);
+    g_return_val_if_fail (monitor != NULL, FALSE);
+    if ( NULL != monitor )
+    {
+        monitor->style = style;
+        return TRUE;
+    }
+    return FALSE;
+}
diff --git a/src/monitor_chooser.h b/src/monitor_chooser.h
index 385b7e2..2f0006e 100644
--- a/src/monitor_chooser.h
+++ b/src/monitor_chooser.h
@@ -21,6 +21,16 @@
 
 G_BEGIN_DECLS
 
+typedef enum
+{
+    MONITOR_STYLE_AUTOMATIC = 0,
+    MONITOR_STYLE_CENTERED,
+    MONITOR_STYLE_TILED,
+    MONITOR_STYLE_STRETCHED,
+    MONITOR_STYLE_SCALED,
+    MONITOR_STYLE_ZOOMED
+} RsttoMonitorStyle;
+
 #define RSTTO_TYPE_MONITOR_CHOOSER rstto_monitor_chooser_get_type()
 
 #define RSTTO_MONITOR_CHOOSER(obj)( \
@@ -76,7 +86,14 @@ rstto_monitor_chooser_set_pixbuf (
         GError **);
 
 gint
-rstto_monitor_chooser_get_selected ( RsttoMonitorChooser * );
+rstto_monitor_chooser_get_selected (
+        RsttoMonitorChooser *);
+
+gboolean
+rstto_monitor_chooser_set_style (
+        RsttoMonitorChooser *chooser,
+        gint monitor_id,
+        RsttoMonitorStyle style );
 
 G_END_DECLS
 
diff --git a/src/xfce_wallpaper_manager.c b/src/xfce_wallpaper_manager.c
index 214b0ac..b5b7e08 100644
--- a/src/xfce_wallpaper_manager.c
+++ b/src/xfce_wallpaper_manager.c
@@ -50,6 +50,15 @@ rstto_xfce_wallpaper_manager_dispose (GObject *object);
 static void
 rstto_xfce_wallpaper_manager_finalize (GObject *object);
 
+static void
+cb_style_combo_changed (
+        GtkComboBox *style_combo,
+        RsttoXfceWallpaperManager *manager);
+static void
+cb_monitor_chooser_changed (
+        RsttoMonitorChooser *monitor_chooser,
+        RsttoXfceWallpaperManager *manager);
+
 static GObjectClass *parent_class = NULL;
 
 static RsttoWallpaperManager *xfce_wallpaper_manager_object;
@@ -64,6 +73,11 @@ struct _RsttoXfceWallpaperManagerPriv
     gint    brightness;
     RsttoColor *color1;
     RsttoColor *color2;
+
+    GFile *file;
+
+    GtkWidget *monitor_chooser;
+    GtkWidget *style_combo;
 };
 
 
@@ -85,13 +99,11 @@ rstto_xfce_wallpaper_manager_configure_dialog_run (RsttoWallpaperManager *self,
     GtkWidget *dialog = gtk_dialog_new_with_buttons (_("Set as wallpaper"), NULL, 0, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
     GtkWidget *vbox = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
     GtkWidget *style_label = gtk_label_new( _("Style:"));
-    GtkWidget *style_combo = gtk_combo_box_new_text();
     GtkWidget *monitor_label = gtk_label_new( _("Monitor:"));
-    GtkWidget *monitor_combo = gtk_combo_box_new_text();
     GtkWidget *brightness_label = gtk_label_new( _("Brightness:"));
     GtkWidget *saturation_label = gtk_label_new( _("Saturation:"));
     GtkObject *brightness_adjustment = gtk_adjustment_new (0.0, -128.0, 127.0, 1.0, 10.0, 0.0);
-    GtkObject *saturation_adjustment = gtk_adjustment_new (1.0, 0.0, 10.0, 0.1, 0.5, 0);
+    GtkObject *saturation_adjustment = gtk_adjustment_new (1.0, -10.0, 10.0, 0.1, 0.5, 0.0);
     GtkWidget *brightness_slider = gtk_hscale_new (GTK_ADJUSTMENT (brightness_adjustment));
     GtkWidget *saturation_slider = gtk_hscale_new (GTK_ADJUSTMENT (saturation_adjustment));
     GdkPixbuf *image_pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default(),
@@ -99,31 +111,38 @@ rstto_xfce_wallpaper_manager_configure_dialog_run (RsttoWallpaperManager *self,
                                                      128,
                                                      0,
                                                      NULL);
-    GtkWidget *prop_table = gtk_table_new (1, 2, FALSE);
-    GtkWidget *image_prop_table = gtk_table_new (2, 2, FALSE);
-    GtkWidget *monitor_chooser = rstto_monitor_chooser_new ();
+    GtkWidget *image_prop_table = gtk_table_new (3, 2, FALSE);
+
+    manager->priv->monitor_chooser = rstto_monitor_chooser_new ();
+    manager->priv->style_combo = gtk_combo_box_text_new();
+    manager->priv->file = file;
+
+    gtk_table_set_row_spacing (GTK_TABLE(image_prop_table), 1, 4);
 
     for (i = 0; i < n_monitors; ++i)
     {
         gdk_screen_get_monitor_geometry (screen, i, &monitor_geometry);
-        rstto_monitor_chooser_add (RSTTO_MONITOR_CHOOSER(monitor_chooser), monitor_geometry.width, monitor_geometry.height);
-        rstto_monitor_chooser_set_pixbuf (
-                RSTTO_MONITOR_CHOOSER(monitor_chooser),
-                i,
-                gdk_pixbuf_new_from_file_at_size(
-                        g_file_get_path(file),
-                        500,
-                        500,
-                        NULL),
-                NULL);
+        rstto_monitor_chooser_add (
+            RSTTO_MONITOR_CHOOSER (manager->priv->monitor_chooser),
+            monitor_geometry.width,
+            monitor_geometry.height);
     }
-
-
-    gtk_box_pack_start (GTK_BOX (vbox), monitor_chooser, FALSE, FALSE, 0);
-    gtk_table_attach (GTK_TABLE (prop_table), style_label, 0, 1, 0, 1, 0, 0, 0, 0);
-    gtk_table_attach (GTK_TABLE (prop_table), style_combo, 1, 2, 0, 1, 0, 0, 0, 0);
-
-
+    rstto_monitor_chooser_set_pixbuf (
+        RSTTO_MONITOR_CHOOSER(manager->priv->monitor_chooser),
+        0,
+        gdk_pixbuf_new_from_file_at_size(
+            g_file_get_path(file),
+            500,
+            500,
+            NULL),
+        NULL);
+        rstto_monitor_chooser_add (
+            RSTTO_MONITOR_CHOOSER (manager->priv->monitor_chooser),
+            monitor_geometry.width,
+            monitor_geometry.height);
+
+
+    gtk_box_pack_start (GTK_BOX (vbox), manager->priv->monitor_chooser, FALSE, FALSE, 0);
     gtk_box_pack_start (GTK_BOX (vbox), image_prop_table, FALSE, FALSE, 0);
 
     gtk_scale_set_value_pos (GTK_SCALE (brightness_slider), GTK_POS_RIGHT);
@@ -134,27 +153,33 @@ rstto_xfce_wallpaper_manager_configure_dialog_run (RsttoWallpaperManager *self,
     gtk_table_attach (GTK_TABLE (image_prop_table), brightness_slider, 1, 2, 0, 1, GTK_EXPAND|GTK_FILL, 0, 0, 0);
     gtk_table_attach (GTK_TABLE (image_prop_table), saturation_label, 0, 1, 1, 2, 0, 0, 0, 0);
     gtk_table_attach (GTK_TABLE (image_prop_table), saturation_slider, 1, 2, 1, 2, GTK_EXPAND|GTK_FILL, 0, 0, 0);
+    gtk_table_attach (GTK_TABLE (image_prop_table), style_label, 0, 1, 2, 3, 0, 0, 0, 0);
+    gtk_table_attach (GTK_TABLE (image_prop_table), manager->priv->style_combo, 1, 2, 2, 3, GTK_EXPAND|GTK_FILL, 0, 0, 0);
 
-    gtk_combo_box_append_text (GTK_COMBO_BOX (style_combo), _("Auto"));
-    gtk_combo_box_append_text (GTK_COMBO_BOX (style_combo), _("Centered"));
-    gtk_combo_box_append_text (GTK_COMBO_BOX (style_combo), _("Tiled"));
-    gtk_combo_box_append_text (GTK_COMBO_BOX (style_combo), _("Stretched"));
-    gtk_combo_box_append_text (GTK_COMBO_BOX (style_combo), _("Scaled"));
-    gtk_combo_box_append_text (GTK_COMBO_BOX (style_combo), _("Zoomed"));
-    gtk_combo_box_set_active (GTK_COMBO_BOX (style_combo), 4);
+    gtk_combo_box_append_text (GTK_COMBO_BOX (manager->priv->style_combo), _("Auto"));
+    gtk_combo_box_append_text (GTK_COMBO_BOX (manager->priv->style_combo), _("Centered"));
+    gtk_combo_box_append_text (GTK_COMBO_BOX (manager->priv->style_combo), _("Tiled"));
+    gtk_combo_box_append_text (GTK_COMBO_BOX (manager->priv->style_combo), _("Stretched"));
+    gtk_combo_box_append_text (GTK_COMBO_BOX (manager->priv->style_combo), _("Scaled"));
+    gtk_combo_box_append_text (GTK_COMBO_BOX (manager->priv->style_combo), _("Zoomed"));
+    gtk_combo_box_set_active (GTK_COMBO_BOX (manager->priv->style_combo), 4);
 
     manager->priv->screen = gdk_screen_get_number (screen);
 
     gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+
+    g_signal_connect (G_OBJECT(manager->priv->monitor_chooser), "changed", G_CALLBACK (cb_monitor_chooser_changed), manager);
+    g_signal_connect (G_OBJECT(manager->priv->style_combo), "changed", G_CALLBACK (cb_style_combo_changed), manager);
+
     gtk_widget_show_all (vbox);
     response = gtk_dialog_run (GTK_DIALOG (dialog));
     gtk_widget_hide (dialog);
     if (response == GTK_RESPONSE_OK)
     {
-        manager->priv->style = gtk_combo_box_get_active (GTK_COMBO_BOX (style_combo));
+        manager->priv->style = gtk_combo_box_get_active (GTK_COMBO_BOX (manager->priv->style_combo));
         manager->priv->saturation = gtk_adjustment_get_value (GTK_ADJUSTMENT (saturation_adjustment));
         manager->priv->brightness = (gint)gtk_adjustment_get_value (GTK_ADJUSTMENT (brightness_adjustment));
-        manager->priv->monitor = gtk_combo_box_get_active (GTK_COMBO_BOX(monitor_combo));
+        manager->priv->monitor = rstto_monitor_chooser_get_selected(RSTTO_MONITOR_CHOOSER(manager->priv->monitor_chooser));
     }
 
     gtk_widget_destroy (dialog);
@@ -371,3 +396,37 @@ rstto_xfce_wallpaper_manager_new (void)
 
     return xfce_wallpaper_manager_object;
 }
+
+static void
+cb_style_combo_changed (
+        GtkComboBox *style_combo,
+        RsttoXfceWallpaperManager *manager)
+{
+    RsttoMonitorStyle style = gtk_combo_box_get_active (style_combo);
+    gint monitor_id = rstto_monitor_chooser_get_selected (RSTTO_MONITOR_CHOOSER(manager->priv->monitor_chooser));
+
+    rstto_monitor_chooser_set_style (
+        RSTTO_MONITOR_CHOOSER(manager->priv->monitor_chooser),
+        monitor_id,
+        style);
+    
+}
+
+static void
+cb_monitor_chooser_changed (
+        RsttoMonitorChooser *monitor_chooser,
+        RsttoXfceWallpaperManager *manager)
+{
+    rstto_monitor_chooser_set_pixbuf (monitor_chooser, manager->priv->monitor, NULL, NULL);
+    manager->priv->monitor = rstto_monitor_chooser_get_selected (monitor_chooser);
+
+    rstto_monitor_chooser_set_pixbuf (
+        RSTTO_MONITOR_CHOOSER(manager->priv->monitor_chooser),
+        manager->priv->monitor,
+        gdk_pixbuf_new_from_file_at_size(
+            g_file_get_path(manager->priv->file),
+            500,
+            500,
+            NULL),
+        NULL);
+}


More information about the Xfce4-commits mailing list