[Goodies-commits] r4688 - xfce4-notes-plugin/trunk/panel-plugin

Mike Massonnet mmassonnet at xfce.org
Wed Apr 30 11:14:37 CEST 2008


Author: mmassonnet
Date: 2008-04-30 09:14:37 +0000 (Wed, 30 Apr 2008)
New Revision: 4688

Modified:
   xfce4-notes-plugin/trunk/panel-plugin/defines.h
   xfce4-notes-plugin/trunk/panel-plugin/notes-properties-dialog.c
   xfce4-notes-plugin/trunk/panel-plugin/notes.c
   xfce4-notes-plugin/trunk/panel-plugin/notes.h
   xfce4-notes-plugin/trunk/panel-plugin/panel-plugin.c
Log:
rename the channels and some properties; make the panel plugin options work;
* src/defines.h,
  src/notes-properties-dialog.c,
  src/notes.c,
  src/notes.h,
  src/panel-plugin.c:
  - Define the channel names
  - Make use of new channel/property names
* src/notes.c:
* src/panel-plugin.c:
  - Attach a callback to "property-changed" signal on the panel plugin channel
  - Update arrow visibility
  - Update taskbar hint for the windows


Modified: xfce4-notes-plugin/trunk/panel-plugin/defines.h
===================================================================
--- xfce4-notes-plugin/trunk/panel-plugin/defines.h	2008-04-30 05:25:34 UTC (rev 4687)
+++ xfce4-notes-plugin/trunk/panel-plugin/defines.h	2008-04-30 09:14:37 UTC (rev 4688)
@@ -22,5 +22,8 @@
 
 #define BORDER      8
 
+#define XFCONF_CHANNEL_NEW_WINDOW       "xfce4-notes-plugin_new-window"
+#define XFCONF_CHANNEL_PANEL_PLUGIN     "xfce4-notes-plugin_panel-plugin"
+
 #endif
 

Modified: xfce4-notes-plugin/trunk/panel-plugin/notes-properties-dialog.c
===================================================================
--- xfce4-notes-plugin/trunk/panel-plugin/notes-properties-dialog.c	2008-04-30 05:25:34 UTC (rev 4687)
+++ xfce4-notes-plugin/trunk/panel-plugin/notes-properties-dialog.c	2008-04-30 09:14:37 UTC (rev 4688)
@@ -29,28 +29,37 @@
 
 
 
-static XfconfChannel *channel = NULL;
+static XfconfChannel *channel_panel_plugin = NULL;
+static XfconfChannel *channel_new_window = NULL;
 
 static void
-cb_toggled (GtkToggleButton *button,
-            const gchar *property)
+cb_channel_panel_plugin_toggled (GtkToggleButton *button,
+                                 const gchar *property)
 {
-  xfconf_channel_set_bool (channel, property, gtk_toggle_button_get_active (button));
+  xfconf_channel_set_bool (channel_panel_plugin, property, gtk_toggle_button_get_active (button));
 }
 
 static void
-cb_fontset (GtkFontButton *fontbutton)
+cb_channel_new_window_toggled (GtkToggleButton *button,
+                               const gchar *property)
 {
-  xfconf_channel_set_string (channel, "/window_font/description", gtk_font_button_get_font_name (fontbutton));
+  xfconf_channel_set_bool (channel_new_window, property, gtk_toggle_button_get_active (button));
 }
 
 static void
-cb_scale (GtkRange *range,
-          const gchar *property)
+cb_channel_new_window_fontset (GtkFontButton *fontbutton,
+                               const gchar *property)
 {
-  xfconf_channel_set_int (channel, property, (gint32)gtk_range_get_value (range));
+  xfconf_channel_set_string (channel_new_window, property, gtk_font_button_get_font_name (fontbutton));
 }
 
+static void
+cb_channel_new_window_scale (GtkRange *range,
+                             const gchar *property)
+{
+  xfconf_channel_set_int (channel_new_window, property, (gint32)gtk_range_get_value (range));
+}
+
 GtkWidget *
 prop_dialog_new (NotesPlugin *notes_plugin)
 {
@@ -58,10 +67,10 @@
   GtkWidget *fontbutton, *size_box;
 
   /* Configuration channel */
-  if (channel == NULL)
+  if (NULL == channel_panel_plugin && NULL == channel_new_window)
     {
-      xfconf_init (NULL);
-      channel = xfconf_channel_new ("/Xfce4NotesPlugin/DefaultSettings");
+      channel_panel_plugin = notes_plugin->channel_panel_plugin;
+      channel_new_window = notes_plugin->channel_new_window;
     }
 
   /* Dialog */
@@ -87,10 +96,17 @@
   /* Hide from taskbar */
   button = gtk_check_button_new_with_label (_("Hide windows from taskbar"));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
-                                xfconf_channel_get_bool (channel, "/window_state/hide_from_taskbar", FALSE));
+                                xfconf_channel_get_bool (channel_panel_plugin, "/hide_windows_from_taskbar", FALSE));
   gtk_container_add (GTK_CONTAINER (box), button);
-  g_signal_connect (button, "toggled", G_CALLBACK (cb_toggled), "/window_state/hide_from_taskbar");
+  g_signal_connect (button, "toggled", G_CALLBACK (cb_channel_panel_plugin_toggled), "/hide_windows_from_taskbar");
 
+  /* Hide arrow button */
+  button = gtk_check_button_new_with_label (_("Hide arrow button"));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
+                                xfconf_channel_get_bool (channel_panel_plugin, "/hide_arrow_button", FALSE));
+  gtk_container_add (GTK_CONTAINER (box), button);
+  g_signal_connect (button, "toggled", G_CALLBACK (cb_channel_panel_plugin_toggled), "/hide_arrow_button");
+
   /* === New window settings === */
   box = gtk_vbox_new (TRUE, BORDER);
   frame = xfce_create_framebox_with_content (_("New window settings"), box);
@@ -100,23 +116,23 @@
   /* Always on top */
   button = gtk_check_button_new_with_label (_("Always on top"));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
-                                xfconf_channel_get_bool (channel, "/window_state/always_on_top", FALSE));
+                                xfconf_channel_get_bool (channel_new_window, "/window_state/always_on_top", FALSE));
   gtk_box_pack_start (GTK_BOX (box), button, TRUE, FALSE, 0);
-  g_signal_connect (button, "toggled", G_CALLBACK (cb_toggled), "/window_state/always_on_top");
+  g_signal_connect (button, "toggled", G_CALLBACK (cb_channel_new_window_toggled), "/window_state/always_on_top");
 
   /* Sticky window */
   button = gtk_check_button_new_with_label (_("Sticky window"));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
-                                xfconf_channel_get_bool (channel, "/window_state/sticky", TRUE));
+                                xfconf_channel_get_bool (channel_new_window, "/window_state/sticky", TRUE));
   gtk_box_pack_start (GTK_BOX (box), button, TRUE, FALSE, 0);
-  g_signal_connect (button, "toggled", G_CALLBACK (cb_toggled), "/window_state/sticky");
+  g_signal_connect (button, "toggled", G_CALLBACK (cb_channel_new_window_toggled), "/window_state/sticky");
 
   /* Resize grip */
   button = gtk_check_button_new_with_label (_("Resize grip"));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
-                                xfconf_channel_get_bool (channel, "/window_state/resize_grip", FALSE));
+                                xfconf_channel_get_bool (channel_new_window, "/window_state/resize_grip", FALSE));
   gtk_box_pack_start (GTK_BOX (box), button, TRUE, FALSE, 0);
-  g_signal_connect (button, "toggled", G_CALLBACK (cb_toggled), "/window_state/resize_grip");
+  g_signal_connect (button, "toggled", G_CALLBACK (cb_channel_new_window_toggled), "/window_state/resize_grip");
 
   /* Font */
   hbox = gtk_hbox_new (FALSE, BORDER);
@@ -124,15 +140,15 @@
 
   button = gtk_check_button_new_with_label (_("Font"));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
-                                xfconf_channel_get_bool (channel, "/window_state/use_font", FALSE));
+                                xfconf_channel_get_bool (channel_new_window, "/window_state/use_font", FALSE));
   gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
-  g_signal_connect (button, "toggled", G_CALLBACK (cb_toggled), "/window_state/use_font");
+  g_signal_connect (button, "toggled", G_CALLBACK (cb_channel_new_window_toggled), "/window_state/use_font");
 
-  gchar *description = xfconf_channel_get_string (channel, "/window_font/description", "Sans 10");
+  gchar *description = xfconf_channel_get_string (channel_new_window, "/font/description", "Sans 10");
   fontbutton = gtk_font_button_new_with_font (description);
   g_free (description);
   gtk_box_pack_start (GTK_BOX (hbox), fontbutton, TRUE, TRUE, 0);
-  g_signal_connect (fontbutton, "font-set", G_CALLBACK (cb_fontset), NULL);
+  g_signal_connect (fontbutton, "font-set", G_CALLBACK (cb_channel_new_window_fontset), "/font/description");
 
   /* Size */
   hbox = gtk_hbox_new (FALSE, BORDER);
@@ -146,20 +162,20 @@
 
   scale = gtk_hscale_new_with_range (20, 600, 10);
   gtk_range_set_value (GTK_RANGE (scale),
-                       (gdouble)xfconf_channel_get_int (channel, "/window_geometry/width", 375));
+                       (gdouble)xfconf_channel_get_int (channel_new_window, "/geometry/width", 375));
   gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_RIGHT);
   gtk_box_pack_start (GTK_BOX (size_box), scale, TRUE, TRUE, 0);
-  g_signal_connect (scale, "value-changed", G_CALLBACK (cb_scale), "/window_geometry/width");
+  g_signal_connect (scale, "value-changed", G_CALLBACK (cb_channel_new_window_scale), "/geometry/width");
 
   label = gtk_label_new ("×");
   gtk_box_pack_start (GTK_BOX (size_box), label, FALSE, FALSE, 0);
 
   scale = gtk_hscale_new_with_range (20, 600, 10);
   gtk_range_set_value (GTK_RANGE (scale),
-                       (gdouble)xfconf_channel_get_int (channel, "/window_geometry/height", 430));
+                       (gdouble)xfconf_channel_get_int (channel_new_window, "/geometry/height", 430));
   gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_LEFT);
   gtk_box_pack_start (GTK_BOX (size_box), scale, TRUE, TRUE, 0);
-  g_signal_connect (scale, "value-changed", G_CALLBACK (cb_scale), "/window_geometry/height");
+  g_signal_connect (scale, "value-changed", G_CALLBACK (cb_channel_new_window_scale), "/geometry/height");
 
   /* === Ending === */
   gtk_widget_show_all (GTK_DIALOG (dialog)->vbox);

Modified: xfce4-notes-plugin/trunk/panel-plugin/notes.c
===================================================================
--- xfce4-notes-plugin/trunk/panel-plugin/notes.c	2008-04-30 05:25:34 UTC (rev 4687)
+++ xfce4-notes-plugin/trunk/panel-plugin/notes.c	2008-04-30 09:14:37 UTC (rev 4688)
@@ -168,21 +168,20 @@
   notes_window->notes = NULL;
   notes_window->name = g_strdup (window_name);
 
-#ifdef HAVE_XFCONF
-  /* Configuration channel */
-  xfconf_init (NULL);
-  XfconfChannel *channel = xfconf_channel_new ("/Xfce4NotesPlugin/DefaultSettings");
-#endif
-
   /* Window */
   notes_window->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   gtk_window_set_deletable (GTK_WINDOW (notes_window->window), FALSE);
   gtk_window_set_title (GTK_WINDOW (notes_window->window), window_name);
-  gtk_window_set_default_size (GTK_WINDOW (notes_window->window),
 #ifdef HAVE_XFCONF
-                               xfconf_channel_get_int (channel, "/window_geometry/width", 375),
-                               xfconf_channel_get_int (channel, "/window_geometry/height", 430));
+  gtk_window_set_skip_taskbar_hint (GTK_WINDOW (notes_window->window),
+                                    xfconf_channel_get_bool (notes_plugin->channel_panel_plugin,
+                                                             "/hide_windows_from_taskbar",
+                                                             FALSE));
+  gtk_window_set_default_size (GTK_WINDOW (notes_window->window),
+                               xfconf_channel_get_int (notes_plugin->channel_new_window, "/window_geometry/width", 375),
+                               xfconf_channel_get_int (notes_plugin->channel_new_window, "/window_geometry/height", 430));
 #else
+  gtk_window_set_default_size (GTK_WINDOW (notes_window->window),
                                375, 430);
 #endif
   gtk_window_set_decorated (GTK_WINDOW (notes_window->window), FALSE);
@@ -484,6 +483,7 @@
 {
   XfceRc               *rc;
   NotesNote            *notes_note;
+  NotesPlugin          *notes_plugin = notes_window->notes_plugin;
   const gchar          *note_name;
   gint                  w = 375;
   gint                  h = 430;
@@ -525,19 +525,16 @@
     }
 
 #ifdef HAVE_XFCONF
-  xfconf_init (NULL);
-  XfconfChannel *channel = xfconf_channel_new ("/Xfce4NotesPlugin/DefaultSettings");
-  w =               xfconf_channel_get_int  (channel, "/window_geometry/width", w);
-  h =               xfconf_channel_get_int  (channel, "/window_geometry/height", h);
-  above =           xfconf_channel_get_bool (channel, "/window_state/always_on_top", above);
-  show_on_startup = xfconf_channel_get_bool (channel, "/window_state/show_on_startup", show_on_startup);
-  show_statusbar =  xfconf_channel_get_bool (channel, "/window_state/resize_grip", show_statusbar);
-  sticky =          xfconf_channel_get_bool (channel, "/window_state/sticky", sticky);
-  visible =         xfconf_channel_get_bool (channel, "/window_state/visible", visible);
-  transparency =    xfconf_channel_get_int  (channel, "/window_state/transparency", transparency);
-  if (xfconf_channel_get_bool (channel, "/window_state/use_font", FALSE))
-    font_descr =    xfconf_channel_get_string (channel, "/window_font/description", "Sans 10");
-  g_object_unref (channel);
+  w =               xfconf_channel_get_int  (notes_plugin->channel_new_window, "/window_geometry/width", w);
+  h =               xfconf_channel_get_int  (notes_plugin->channel_new_window, "/window_geometry/height", h);
+  above =           xfconf_channel_get_bool (notes_plugin->channel_new_window, "/window_state/always_on_top", above);
+  show_on_startup = xfconf_channel_get_bool (notes_plugin->channel_new_window, "/window_state/show_on_startup", show_on_startup);
+  show_statusbar =  xfconf_channel_get_bool (notes_plugin->channel_new_window, "/window_state/resize_grip", show_statusbar);
+  sticky =          xfconf_channel_get_bool (notes_plugin->channel_new_window, "/window_state/sticky", sticky);
+  visible =         xfconf_channel_get_bool (notes_plugin->channel_new_window, "/window_state/visible", visible);
+  transparency =    xfconf_channel_get_int  (notes_plugin->channel_new_window, "/window_state/transparency", transparency);
+  if (xfconf_channel_get_bool (notes_plugin->channel_new_window, "/window_state/use_font", FALSE))
+    font_descr =    xfconf_channel_get_string (notes_plugin->channel_new_window, "/window_font/description", "Sans 10");
 #endif
 
   rc = xfce_rc_simple_open (notes_window->notes_plugin->config_file, FALSE);
@@ -848,7 +845,7 @@
 
   /* NotesWindow options menu */
   notes_window->menu_options = gtk_menu_new ();
-  GtkWidget *mi_show_statusbar  = gtk_check_menu_item_new_with_label (_("Show statusbar"));
+  GtkWidget *mi_show_statusbar  = gtk_check_menu_item_new_with_label (_("Resize grip"));
   GtkWidget *mi_above           = gtk_check_menu_item_new_with_label (_("Always on top"));
   GtkWidget *mi_sticky          = gtk_check_menu_item_new_with_label (_("Sticky window"));
   GtkWidget *mi_show_on_startup = gtk_menu_item_new_with_label (_("Show on startup"));

Modified: xfce4-notes-plugin/trunk/panel-plugin/notes.h
===================================================================
--- xfce4-notes-plugin/trunk/panel-plugin/notes.h	2008-04-30 05:25:34 UTC (rev 4687)
+++ xfce4-notes-plugin/trunk/panel-plugin/notes.h	2008-04-30 09:14:37 UTC (rev 4688)
@@ -25,6 +25,9 @@
 #include <libxfce4panel/xfce-panel-convenience.h>
 #include <libxfcegui4/libxfcegui4.h>
 #ifdef HAVE_THUNAR_VFS
+#include <xfconf/xfconf.h>
+#endif
+#ifdef HAVE_THUNAR_VFS
 #include <thunar-vfs/thunar-vfs.h>
 #endif
 
@@ -57,6 +60,10 @@
 
   GtkTooltips          *tooltips;
 
+#ifdef HAVE_XFCONF
+  XfconfChannel        *channel_panel_plugin;
+  XfconfChannel        *channel_new_window;
+#endif
 #ifdef HAVE_THUNAR_VFS
   ThunarVfsMonitor     *monitor;
   ThunarVfsPath        *thunar_vfs_path;

Modified: xfce4-notes-plugin/trunk/panel-plugin/panel-plugin.c
===================================================================
--- xfce4-notes-plugin/trunk/panel-plugin/panel-plugin.c	2008-04-30 05:25:34 UTC (rev 4687)
+++ xfce4-notes-plugin/trunk/panel-plugin/panel-plugin.c	2008-04-30 09:14:37 UTC (rev 4688)
@@ -23,6 +23,7 @@
 #include <config.h>
 #endif
 
+#include "defines.h"
 #include "notes.h"
 #ifdef HAVE_XFCONF
 #include "notes-properties-dialog.h"
@@ -54,7 +55,14 @@
 static void             notes_plugin_free               (NotesPlugin *notes_plugin);
 
 static void             notes_plugin_destroy_timeout    (NotesPlugin *notes_plugin);
+#ifdef HAVE_XFCONF
+static void             notes_plugin_monitor_xfconf     (NotesPlugin *notes_plugin);
 
+static void             notes_plugin_xfconf_property_changed
+                                                        (NotesPlugin *notes_plugin,
+                                                         gchar *property,
+                                                         GValue *value);
+#endif
 #ifdef HAVE_THUNAR_VFS
 static NotesWindow     *notes_plugin_get_window_by_name (NotesPlugin *notes_plugin,
                                                          const gchar *name);
@@ -102,6 +110,16 @@
 
   NotesPlugin *notes_plugin = notes_plugin_new (panel_plugin);
   g_return_if_fail (G_LIKELY (notes_plugin != NULL));
+#ifdef HAVE_XFCONF
+  notes_plugin_monitor_xfconf (notes_plugin);
+#endif
+
+  gtk_widget_show_all (GTK_WIDGET (panel_plugin));
+#ifdef HAVE_XFCONF
+  if (xfconf_channel_get_bool (notes_plugin->channel_panel_plugin, "/hide_arrow_button", FALSE))
+    gtk_widget_hide (notes_plugin->btn_arrow);
+#endif
+
   notes_plugin_load_data (notes_plugin);
 }
 
@@ -125,6 +143,10 @@
   DBG ("\nLook up file: %s\nNotes path: %s", notes_plugin->config_file,
                                            notes_plugin->notes_path);
 
+#ifdef HAVE_XFCONF
+  xfconf_init (NULL);
+#endif
+
   notes_plugin->windows = NULL;
   notes_plugin->box_panel = GTK_WIDGET (xfce_hvbox_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 0));
   notes_plugin->btn_panel = xfce_create_panel_toggle_button ();
@@ -193,7 +215,6 @@
 #endif
   xfce_panel_plugin_add_action_widget (panel_plugin, notes_plugin->btn_panel);
   xfce_panel_plugin_add_action_widget (panel_plugin, notes_plugin->btn_arrow);
-  gtk_widget_show_all (GTK_WIDGET (panel_plugin));
 
   return notes_plugin;
 }
@@ -296,6 +317,9 @@
 notes_plugin_free (NotesPlugin *notes_plugin)
 {
   notes_plugin_save_data_all (notes_plugin);
+#ifdef HAVE_XFCONF
+  xfconf_shutdown ();
+#endif
 #ifdef HAVE_THUNAR_VFS
   /* TODO move code out from notes_window_destroy and add notes_window_free
    * which would only free memory and not corrupt notes or configuration data
@@ -321,6 +345,43 @@
   notes_plugin->timeout = 0;
 }
 
+#ifdef HAVE_XFCONF
+static void
+notes_plugin_monitor_xfconf (NotesPlugin *notes_plugin)
+{
+  notes_plugin->channel_new_window = xfconf_channel_new (XFCONF_CHANNEL_NEW_WINDOW);
+  notes_plugin->channel_panel_plugin = xfconf_channel_new (XFCONF_CHANNEL_PANEL_PLUGIN);
+  g_signal_connect_swapped (notes_plugin->channel_panel_plugin, "property-changed",
+                            G_CALLBACK (notes_plugin_xfconf_property_changed), notes_plugin);
+}
+
+static void
+notes_plugin_xfconf_property_changed (NotesPlugin *notes_plugin,
+                                      gchar *property,
+                                      GValue *value)
+{
+  /* Refresh both elements
+   * TODO find out how to guess efficiently the property name */
+  gboolean v = g_value_get_boolean (value);
+  if (!g_ascii_strcasecmp (property, "/hide_windows_from_taskbar"))
+    {
+      GSList *l;
+      for (l = notes_plugin->windows; l != NULL; l = l->next)
+        {
+          NotesWindow *notes_window = l->data;
+          gtk_window_set_skip_taskbar_hint (GTK_WINDOW (notes_window->window), v);
+        }
+    }
+  else if (!g_ascii_strcasecmp (property, "/hide_arrow_button"))
+    {
+      if (v)
+        gtk_widget_hide (notes_plugin->btn_arrow);
+      else
+        gtk_widget_show (notes_plugin->btn_arrow);
+    }
+}
+#endif
+
 #ifdef HAVE_THUNAR_VFS
 static NotesWindow *
 notes_plugin_get_window_by_name (NotesPlugin *notes_plugin,




More information about the Goodies-commits mailing list