[Xfce4-commits] <xfce4-places-plugin:master> Switched from a configuration file to xfconf.
Andrzej
noreply at xfce.org
Sat Sep 15 21:56:02 CEST 2012
Updating branch refs/heads/master
to 19178ffd167bc0e0139fbf7db54f8acf999b47de (commit)
from 362dd6ee150a0140d7f328c8e361ad06e0b94655 (commit)
commit 19178ffd167bc0e0139fbf7db54f8acf999b47de
Author: Andrzej <ndrwrdck at gmail.com>
Date: Sun Sep 16 04:54:10 2012 +0900
Switched from a configuration file to xfconf.
configure.in.in | 1 +
panel-plugin/Makefile.am | 4 +-
panel-plugin/cfg.c | 667 ++++++++++++++++++++++++++--------------------
panel-plugin/cfg.h | 6 +-
panel-plugin/view.c | 57 +---
panel-plugin/view.h | 14 +-
6 files changed, 391 insertions(+), 358 deletions(-)
diff --git a/configure.in.in b/configure.in.in
index c0ab984..ea1fb3d 100644
--- a/configure.in.in
+++ b/configure.in.in
@@ -35,6 +35,7 @@ XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.8.0])
XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1], [4.8.0])
XDT_CHECK_PACKAGE([LIBXFCE4PANEL], [libxfce4panel-1.0], [4.8.0])
XDT_CHECK_PACKAGE([EXO], [exo-1], [0.5.0])
+XDT_CHECK_PACKAGE([XFCONF], [libxfconf-0], [4.6.0])
XDT_CHECK_LIBX11()
XDT_CHECK_OPTIONAL_PACKAGE([GIO_UNIX], [gio-unix-2.0], [2.22.0], [gio-unix],
diff --git a/panel-plugin/Makefile.am b/panel-plugin/Makefile.am
index fbb4dfa..7f8bcaa 100644
--- a/panel-plugin/Makefile.am
+++ b/panel-plugin/Makefile.am
@@ -47,6 +47,7 @@ libplaces_la_CFLAGS = \
$(LIBXFCE4UI_CFLAGS) \
$(LIBXFCE4PANEL_CFLAGS) \
$(EXO_CFLAGS) \
+ $(XFCONF_CFLAGS) \
$(PLATFORM_CFLAGS)
libplaces_la_LIBADD = \
@@ -62,7 +63,8 @@ libplaces_la_LIBADD = \
$(LIBXFCE4UI_LIBS) \
$(LIBXFCE4PANEL_LIBS) \
$(LIBX11_LIBS) \
- $(EXO_LIBS)
+ $(EXO_LIBS) \
+ $(XFCONF_LIBS)
libplaces_la_LDFLAGS = \
-avoid-version \
diff --git a/panel-plugin/cfg.c b/panel-plugin/cfg.c
index 3cd5ed5..f32747f 100644
--- a/panel-plugin/cfg.c
+++ b/panel-plugin/cfg.c
@@ -3,6 +3,7 @@
* This file provides a means of configuring the plugin.
*
* Copyright (c) 2007-2008 Diego Ongaro <ongardie at gmail.com>
+ * Copyright (c) 2012 Andrzej <ndrwrdck at gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -30,12 +31,48 @@
#include <libxfce4util/libxfce4util.h>
#include <libxfce4panel/libxfce4panel.h>
#include <libxfce4ui/libxfce4ui.h>
+#include <exo/exo.h>
+#include <xfconf/xfconf.h>
#include "cfg.h"
#include "view.h"
static void places_cfg_finalize (GObject *object);
+static void places_cfg_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void places_cfg_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+
+enum
+{
+ PROP_0,
+ PROP_SHOW_BUTTON_TYPE,
+ PROP_BUTTON_LABEL,
+ PROP_SHOW_ICONS,
+ PROP_SHOW_VOLUMES,
+ PROP_MOUNT_OPEN_VOLUMES,
+ PROP_SHOW_BOOKMARKS,
+#if USE_RECENT_DOCUMENTS
+ PROP_SHOW_RECENT,
+ PROP_SHOW_RECENT_CLEAR,
+ PROP_SHOW_RECENT_NUMBER,
+#endif
+ PROP_SEARCH_CMD
+};
+
+enum
+{
+ BUTTON_CHANGED,
+ MENU_CHANGED,
+ MODEL_CHANGED,
+ LAST_SIGNAL
+};
+static guint places_cfg_signals[LAST_SIGNAL] = { 0, };
G_DEFINE_TYPE (PlacesCfg, places_cfg, G_TYPE_OBJECT)
@@ -46,279 +83,317 @@ places_cfg_class_init (PlacesCfgClass *klass)
gobject_class = G_OBJECT_CLASS (klass);
gobject_class->finalize = places_cfg_finalize;
-}
-
+ gobject_class->get_property = places_cfg_get_property;
+ gobject_class->set_property = places_cfg_set_property;
+
+ g_object_class_install_property (gobject_class,
+ PROP_SHOW_BUTTON_TYPE,
+ g_param_spec_uint ("show-button-type",
+ NULL, NULL,
+ 0,
+ 2,
+ 0,
+ EXO_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_BUTTON_LABEL,
+ g_param_spec_string ("button-label",
+ NULL, NULL,
+ _("Places"),
+ EXO_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_SHOW_ICONS,
+ g_param_spec_boolean ("show-icons", NULL, NULL,
+ TRUE,
+ EXO_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_SHOW_VOLUMES,
+ g_param_spec_boolean ("show-volumes", NULL, NULL,
+ TRUE,
+ EXO_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_MOUNT_OPEN_VOLUMES,
+ g_param_spec_boolean ("mount-open-volumes", NULL, NULL,
+ FALSE,
+ EXO_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_SHOW_BOOKMARKS,
+ g_param_spec_boolean ("show-bookmarks", NULL, NULL,
+ TRUE,
+ EXO_PARAM_READWRITE));
+#if USE_RECENT_DOCUMENTS
+ g_object_class_install_property (gobject_class,
+ PROP_SHOW_RECENT,
+ g_param_spec_boolean ("show-recent", NULL, NULL,
+ TRUE,
+ EXO_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_SHOW_RECENT_CLEAR,
+ g_param_spec_boolean ("show-recent-clear", NULL, NULL,
+ TRUE,
+ EXO_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_SHOW_RECENT_NUMBER,
+ g_param_spec_uint ("show-recent-number",
+ NULL, NULL,
+ 1,
+ 25,
+ 10,
+ EXO_PARAM_READWRITE));
+#endif
-static void
-places_cfg_init (PlacesCfg *cfg)
-{
+ g_object_class_install_property (gobject_class,
+ PROP_SEARCH_CMD,
+ g_param_spec_string ("search-cmd",
+ NULL, NULL,
+ "",
+ EXO_PARAM_READWRITE));
+
+ places_cfg_signals[BUTTON_CHANGED] =
+ g_signal_new (g_intern_static_string ("button-changed"),
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ places_cfg_signals[MENU_CHANGED] =
+ g_signal_new (g_intern_static_string ("menu-changed"),
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ places_cfg_signals[MODEL_CHANGED] =
+ g_signal_new (g_intern_static_string ("model-changed"),
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
}
-/********** Configuration File **********/
static void
-pcfg_init_defaults(PlacesCfg *cfg)
+places_cfg_init (PlacesCfg *cfg)
{
-
- cfg->show_button_icon = TRUE;
- cfg->show_button_label = FALSE;
- cfg->show_icons = TRUE;
- cfg->show_volumes = TRUE;
- cfg->mount_open_volumes = FALSE;
- cfg->show_bookmarks = TRUE;
+ cfg->show_button_icon = TRUE;
+ cfg->show_button_label = FALSE;
+ cfg->show_icons = TRUE;
+ cfg->show_volumes = TRUE;
+ cfg->mount_open_volumes = FALSE;
+ cfg->show_bookmarks = TRUE;
#if USE_RECENT_DOCUMENTS
- cfg->show_recent = TRUE;
- cfg->show_recent_clear = TRUE;
- cfg->show_recent_number = 10;
+ cfg->show_recent = TRUE;
+ cfg->show_recent_clear = TRUE;
+ cfg->show_recent_number = 10;
#endif
-
- if(cfg->search_cmd != NULL)
- g_free(cfg->search_cmd);
- cfg->search_cmd = g_strdup("");
-
- if(cfg->label != NULL)
- g_free(cfg->label);
- cfg->label = g_strdup(_("Places"));
-
+ cfg->search_cmd = g_strdup("");
+ cfg->label = g_strdup(_("Places"));
}
+
static void
-pcfg_load(PlacesCfg *cfg)
+places_cfg_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
{
- XfceRc *rcfile;
-
- g_assert(cfg != NULL);
-
- if(cfg->read_path == NULL){
- pcfg_init_defaults(cfg);
- return;
- }
-
- rcfile = xfce_rc_simple_open(cfg->read_path, TRUE);
- if(rcfile == NULL){
- pcfg_init_defaults(cfg);
- return;
- }
-
- cfg->show_button_label = xfce_rc_read_bool_entry(rcfile, "show_button_label", FALSE);
+ PlacesCfg *cfg = XFCE_PLACES_CFG (object);
+ gint val;
- if(!cfg->show_button_label)
- cfg->show_button_icon = TRUE;
- else
- cfg->show_button_icon = xfce_rc_read_bool_entry(rcfile, "show_button_icon", TRUE);
+ switch (prop_id)
+ {
+ case PROP_SHOW_BUTTON_TYPE:
+ if ( cfg->show_button_icon && !cfg->show_button_label) val = 0;
+ else if ( cfg->show_button_icon && cfg->show_button_label) val = 2;
+ else val = 1;
- cfg->show_icons = xfce_rc_read_bool_entry(rcfile, "show_icons", TRUE);
+ g_value_set_uint (value, val);
+ break;
- cfg->show_volumes = xfce_rc_read_bool_entry(rcfile, "show_volumes", TRUE);
- cfg->mount_open_volumes = xfce_rc_read_bool_entry(rcfile, "mount_open_volumes", FALSE);
+ case PROP_BUTTON_LABEL:
+ g_value_set_string (value, cfg->label);
+ break;
- cfg->show_bookmarks = xfce_rc_read_bool_entry(rcfile, "show_bookmarks", TRUE);
+ case PROP_SHOW_ICONS:
+ g_value_set_boolean (value, cfg->show_icons);
+ break;
- if(cfg->label != NULL)
- g_free(cfg->label);
+ case PROP_SHOW_VOLUMES:
+ g_value_set_boolean (value, cfg->show_volumes);
+ break;
- cfg->label = (gchar*) xfce_rc_read_entry(rcfile, "label", NULL);
- if(cfg->label == NULL || *cfg->label == '\0')
- cfg->label = _("Places");
- cfg->label = g_strdup(cfg->label);
+ case PROP_MOUNT_OPEN_VOLUMES:
+ g_value_set_boolean (value, cfg->mount_open_volumes);
+ break;
- if(cfg->search_cmd != NULL)
- g_free(cfg->search_cmd);
-
- cfg->search_cmd = (gchar*) xfce_rc_read_entry(rcfile, "search_cmd", NULL);
- if(cfg->search_cmd == NULL)
- cfg->search_cmd = "";
- cfg->search_cmd = g_strdup(cfg->search_cmd);
+ case PROP_SHOW_BOOKMARKS:
+ g_value_set_boolean (value, cfg->show_bookmarks);
+ break;
#if USE_RECENT_DOCUMENTS
- cfg->show_recent = xfce_rc_read_bool_entry(rcfile, "show_recent", TRUE);
- cfg->show_recent_clear = xfce_rc_read_bool_entry(rcfile, "show_recent_clear", TRUE);
- cfg->show_recent_number = CLAMP(xfce_rc_read_int_entry(rcfile, "show_recent_number", 10),
- 1, 25);
-#endif
-
- xfce_rc_close(rcfile);
-}
-
-void
-places_cfg_save(PlacesCfg *cfg)
-{
- XfceRc *rcfile;
-
- g_assert(cfg != NULL);
+ case PROP_SHOW_RECENT:
+ g_value_set_boolean (value, cfg->show_recent);
+ break;
- if(cfg->write_path == NULL)
- return;
+ case PROP_SHOW_RECENT_CLEAR:
+ g_value_set_boolean (value, cfg->show_recent_clear);
+ break;
- rcfile = xfce_rc_simple_open(cfg->write_path, FALSE);
- if(rcfile == NULL)
- return;
-
- /* BUTTON */
- xfce_rc_write_bool_entry(rcfile, "show_button_icon", cfg->show_button_icon);
- xfce_rc_write_bool_entry(rcfile, "show_button_label", cfg->show_button_label);
- xfce_rc_write_entry(rcfile, "label", cfg->label);
-
- /* MENU */
- xfce_rc_write_bool_entry(rcfile, "show_icons", cfg->show_icons);
- xfce_rc_write_bool_entry(rcfile, "show_volumes", cfg->show_volumes);
- xfce_rc_write_bool_entry(rcfile, "mount_open_volumes", cfg->mount_open_volumes);
- xfce_rc_write_bool_entry(rcfile, "show_bookmarks", cfg->show_bookmarks);
-#if USE_RECENT_DOCUMENTS
- xfce_rc_write_bool_entry(rcfile, "show_recent", cfg->show_recent);
-
- /* RECENT DOCUMENTS */
- xfce_rc_write_bool_entry(rcfile, "show_recent_clear", cfg->show_recent_clear);
- xfce_rc_write_int_entry(rcfile, "show_recent_number", cfg->show_recent_number);
+ case PROP_SHOW_RECENT_NUMBER:
+ g_value_set_uint (value, cfg->show_recent_number);
+ break;
#endif
- /* SEARCH */
- xfce_rc_write_entry(rcfile, "search_cmd", cfg->search_cmd);
+ case PROP_SEARCH_CMD:
+ g_value_set_string (value, cfg->search_cmd);
+ break;
- xfce_rc_close(rcfile);
-
- DBG("configuration saved");
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
}
-/********** Dialog **********/
static void
-pcfg_button_show_cb(GtkComboBox *combo, PlacesCfg *cfg)
+places_cfg_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
- gint option = gtk_combo_box_get_active(combo);
-
- g_assert(cfg != NULL);
- g_assert(option >= 0 && option <= 2);
-
- cfg->show_button_icon = (option == 0 || option == 2);
- cfg->show_button_label = (option == 1 || option == 2);
-
- places_view_cfg_iface_update_button(cfg->view_iface);
-}
-
-static gboolean
-pcfg_button_label_cb(GtkWidget *label_entry, GdkEventFocus *event, PlacesCfg *cfg)
-{
- const gchar *entry_text;
- gchar *old_text = cfg->label;
- gchar *new_text;
-
- g_assert(cfg != NULL);
-
- entry_text = gtk_entry_get_text(GTK_ENTRY(label_entry));
- new_text = g_strstrip(g_strdup(entry_text));
- if(old_text == NULL || (strcmp(old_text, new_text) && *new_text != '\0')){
- cfg->label = new_text;
-
- if(old_text != NULL)
- g_free(old_text);
-
- places_view_cfg_iface_update_button(cfg->view_iface);
-
- }else{ /* we prefer the old/default text */
-
- if(old_text == NULL)
- cfg->label = g_strdup(_("Places"));
-
- if(old_text == NULL || *new_text == '\0'){
- gtk_entry_set_text(GTK_ENTRY(label_entry), cfg->label);
- places_view_cfg_iface_update_button(cfg->view_iface);
+ PlacesCfg *cfg = XFCE_PLACES_CFG (object);
+ gint val;
+ const char *text;
+
+ DBG ("Property changed");
+ switch (prop_id)
+ {
+ case PROP_SHOW_BUTTON_TYPE:
+ val = g_value_get_uint (value);
+ if (cfg->show_button_icon != (val == 0 || val == 2))
+ {
+ cfg->show_button_icon = (val == 0 || val == 2);
+ g_signal_emit (G_OBJECT (cfg), places_cfg_signals[BUTTON_CHANGED], 0);
}
-
- g_free(new_text);
- }
-
- return FALSE;
-}
-
-static gboolean
-pcfg_search_cmd_cb(GtkWidget *label_entry, GdkEventFocus *event, PlacesCfg *cfg)
-{
- const gchar *entry_text;
- gchar *old_text = cfg->search_cmd;
- gchar *new_text;
-
- g_assert(cfg != NULL);
-
- entry_text = gtk_entry_get_text(GTK_ENTRY(label_entry));
- new_text = g_strstrip(g_strdup(entry_text));
-
- if(old_text == NULL || strcmp(old_text, new_text)){
- cfg->search_cmd = new_text;
-
- if(old_text != NULL)
- g_free(old_text);
-
- places_view_cfg_iface_update_menu(cfg->view_iface);
-
- }else /* we prefer the old text */
- g_free(new_text);
-
- return FALSE;
-}
+ if (cfg->show_button_label != (val == 1 || val == 2))
+ {
+ cfg->show_button_label = (val == 1 || val == 2);
+ g_signal_emit (G_OBJECT (cfg), places_cfg_signals[BUTTON_CHANGED], 0);
+ }
+ break;
+
+ case PROP_BUTTON_LABEL:
+ text = g_value_get_string (value);
+ if (strcmp(cfg->label, text))
+ {
+ if (cfg->label != NULL)
+ g_free (cfg->label);
+ cfg->label = g_value_dup_string (value);
+ g_signal_emit (G_OBJECT (cfg), places_cfg_signals[BUTTON_CHANGED], 0);
+ }
+ break;
+
+ case PROP_SHOW_ICONS:
+ val = g_value_get_boolean (value);
+ if (cfg->show_icons != val)
+ {
+ cfg->show_icons = val;
+ g_signal_emit (G_OBJECT (cfg), places_cfg_signals[MENU_CHANGED], 0);
+ }
+ break;
+
+ case PROP_SHOW_VOLUMES:
+ val = g_value_get_boolean (value);
+ if (cfg->show_volumes != val)
+ {
+ cfg->show_volumes = val;
+ g_signal_emit (G_OBJECT (cfg), places_cfg_signals[MODEL_CHANGED], 0);
+ }
+ break;
+
+ case PROP_MOUNT_OPEN_VOLUMES:
+ val = g_value_get_boolean (value);
+ if (cfg->mount_open_volumes != val)
+ {
+ cfg->mount_open_volumes = val;
+ g_signal_emit (G_OBJECT (cfg), places_cfg_signals[MODEL_CHANGED], 0);
+ }
+ break;
+
+ case PROP_SHOW_BOOKMARKS:
+ val = g_value_get_boolean (value);
+ if (cfg->show_bookmarks != val)
+ {
+ cfg->show_bookmarks = val;
+ g_signal_emit (G_OBJECT (cfg), places_cfg_signals[MODEL_CHANGED], 0);
+ }
+ break;
#if USE_RECENT_DOCUMENTS
-static void
-pcfg_recent_num_cb(GtkAdjustment *adj, PlacesCfg *cfg)
-{
- g_assert(cfg != NULL);
-
- cfg->show_recent_number = (gint) gtk_adjustment_get_value(adj);
- DBG("Show %d recent documents", cfg->show_recent_number);
-
- places_view_cfg_iface_update_menu(cfg->view_iface);
-}
+ case PROP_SHOW_RECENT:
+ val = g_value_get_boolean (value);
+ if (cfg->show_recent != val)
+ {
+ cfg->show_recent = val;
+ g_signal_emit (G_OBJECT (cfg), places_cfg_signals[MENU_CHANGED], 0);
+ }
+ break;
+
+ case PROP_SHOW_RECENT_CLEAR:
+ val = g_value_get_boolean (value);
+ if (cfg->show_recent_clear != val)
+ {
+ cfg->show_recent_clear = val;
+ g_signal_emit (G_OBJECT (cfg), places_cfg_signals[MENU_CHANGED], 0);
+ }
+ break;
+
+ case PROP_SHOW_RECENT_NUMBER:
+ val = g_value_get_uint (value);
+ if (cfg->show_recent_number != val)
+ {
+ cfg->show_recent_number = val;
+ g_signal_emit (G_OBJECT (cfg), places_cfg_signals[MENU_CHANGED], 0);
+ }
+ break;
#endif
-static void
-pcfg_menu_cb(GtkToggleButton *toggle, PlacesCfg *cfg)
-{
- gboolean *opt;
- GtkWidget *transient;
-
- g_assert(cfg != NULL);
-
- opt = g_object_get_data(G_OBJECT(toggle), "cfg_opt");
- g_assert(opt != NULL);
-
- *opt = gtk_toggle_button_get_active(toggle);
-
- transient = g_object_get_data(G_OBJECT(toggle), "cfg_transient");
- if(transient != NULL)
- gtk_widget_set_sensitive(transient, *opt);
+ case PROP_SEARCH_CMD:
+ text = g_value_get_string (value);
+ if (strcmp(cfg->search_cmd, text))
+ {
+ if (cfg->search_cmd != NULL)
+ g_free (cfg->search_cmd);
+ cfg->search_cmd = g_value_dup_string (value);
+ g_signal_emit (G_OBJECT (cfg), places_cfg_signals[MENU_CHANGED], 0);
+ }
+ break;
- places_view_cfg_iface_update_menu(cfg->view_iface);
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
}
-static void
-pcfg_model_cb(GtkToggleButton *toggle, PlacesCfg *cfg)
-{
- gboolean *opt;
- GtkWidget *transient;
-
- g_assert(cfg != NULL);
-
- opt = g_object_get_data(G_OBJECT(toggle), "cfg_opt");
- g_assert(opt != NULL);
-
- *opt = gtk_toggle_button_get_active(toggle);
-
- transient = g_object_get_data(G_OBJECT(toggle), "cfg_transient");
- if(transient != NULL)
- gtk_widget_set_sensitive(transient, *opt);
-
- places_view_cfg_iface_reconfigure_model(cfg->view_iface);
-}
+/********** Dialog **********/
static void
pcfg_dialog_close_cb(GtkDialog *dialog, gint response, PlacesCfg *cfg)
{
gtk_widget_destroy(GTK_WIDGET(dialog));
xfce_panel_plugin_unblock_menu(cfg->plugin);
- places_cfg_save(cfg);
}
static GtkWidget*
@@ -355,7 +430,6 @@ places_cfg_open_dialog(PlacesCfg *cfg)
GtkWidget *tmp_box, *tmp_label, *tmp_widget;
GtkObject * adj;
- gint active;
DBG("configure plugin");
@@ -384,17 +458,8 @@ places_cfg_open_dialog(PlacesCfg *cfg)
gtk_combo_box_append_text(GTK_COMBO_BOX(tmp_widget), _("Label Only"));
gtk_combo_box_append_text(GTK_COMBO_BOX(tmp_widget), _("Icon and Label"));
- if(cfg->show_button_label)
- if(cfg->show_button_icon)
- active = 2;
- else
- active = 1;
- else
- active = 0;
- gtk_combo_box_set_active(GTK_COMBO_BOX(tmp_widget), active);
-
- g_signal_connect(G_OBJECT(tmp_widget), "changed",
- G_CALLBACK(pcfg_button_show_cb), cfg);
+ exo_mutual_binding_new (G_OBJECT (cfg), "show-button-type",
+ G_OBJECT (tmp_widget), "active");
gtk_widget_show(tmp_widget);
gtk_box_pack_start(GTK_BOX(tmp_box), tmp_widget, FALSE, FALSE, 0);
@@ -410,10 +475,8 @@ places_cfg_open_dialog(PlacesCfg *cfg)
tmp_widget = gtk_entry_new();
gtk_label_set_mnemonic_widget(GTK_LABEL(tmp_label), tmp_widget);
- gtk_entry_set_text(GTK_ENTRY(tmp_widget), cfg->label);
-
- g_signal_connect(G_OBJECT(tmp_widget), "focus-out-event",
- G_CALLBACK(pcfg_button_label_cb), cfg);
+ exo_mutual_binding_new (G_OBJECT (cfg), "button-label",
+ G_OBJECT (tmp_widget), "text");
gtk_widget_show(tmp_widget);
gtk_box_pack_start(GTK_BOX(tmp_box), tmp_widget, FALSE, FALSE, 0);
@@ -427,11 +490,8 @@ places_cfg_open_dialog(PlacesCfg *cfg)
/* MENU: Show Icons */
tmp_widget = gtk_check_button_new_with_mnemonic(_("Show _icons in menu"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tmp_widget), cfg->show_icons);
-
- g_object_set_data(G_OBJECT(tmp_widget), "cfg_opt", &(cfg->show_icons));
- g_signal_connect(G_OBJECT(tmp_widget), "toggled",
- G_CALLBACK(pcfg_menu_cb), cfg);
+ exo_mutual_binding_new (G_OBJECT (cfg), "show-icons",
+ G_OBJECT (tmp_widget), "active");
gtk_widget_show(tmp_widget);
gtk_box_pack_start(GTK_BOX(vbox_menu), tmp_widget, FALSE, FALSE, 0);
@@ -439,11 +499,8 @@ places_cfg_open_dialog(PlacesCfg *cfg)
/* MENU: Show Removable Media */
tmp_widget = gtk_check_button_new_with_mnemonic(_("Show _removable media"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tmp_widget), cfg->show_volumes);
-
- g_object_set_data(G_OBJECT(tmp_widget), "cfg_opt", &(cfg->show_volumes));
- g_signal_connect(G_OBJECT(tmp_widget), "toggled",
- G_CALLBACK(pcfg_model_cb), cfg);
+ exo_mutual_binding_new (G_OBJECT (cfg), "show-volumes",
+ G_OBJECT (tmp_widget), "active");
gtk_widget_show(tmp_widget);
gtk_box_pack_start(GTK_BOX(vbox_menu), tmp_widget, FALSE, FALSE, 0);
@@ -452,19 +509,16 @@ places_cfg_open_dialog(PlacesCfg *cfg)
tmp_box = gtk_hbox_new(FALSE, 15);
/* Gray out this box when "Show removable media" is off */
- gtk_widget_set_sensitive(tmp_box, cfg->show_volumes);
- g_object_set_data(G_OBJECT(tmp_widget), "cfg_transient", tmp_box);
+ exo_binding_new (G_OBJECT (cfg), "show-volumes",
+ G_OBJECT (tmp_box), "sensitive");
tmp_widget = gtk_label_new(" "); /* TODO: is there a more appropriate widget? */
gtk_widget_show(tmp_widget);
gtk_box_pack_start(GTK_BOX(tmp_box), tmp_widget, FALSE, FALSE, 0);
tmp_widget = gtk_check_button_new_with_mnemonic(_("Mount and _Open on click"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tmp_widget), cfg->mount_open_volumes);
-
- g_object_set_data(G_OBJECT(tmp_widget), "cfg_opt", &(cfg->mount_open_volumes));
- g_signal_connect(G_OBJECT(tmp_widget), "toggled",
- G_CALLBACK(pcfg_model_cb), cfg);
+ exo_mutual_binding_new (G_OBJECT (cfg), "mount-open-volumes",
+ G_OBJECT (tmp_widget), "active");
gtk_widget_show(tmp_widget);
gtk_box_pack_start(GTK_BOX(tmp_box), tmp_widget, FALSE, FALSE, 0);
@@ -474,11 +528,8 @@ places_cfg_open_dialog(PlacesCfg *cfg)
/* MENU: Show GTK Bookmarks */
tmp_widget = gtk_check_button_new_with_mnemonic(_("Show GTK _bookmarks"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tmp_widget), cfg->show_bookmarks);
-
- g_object_set_data(G_OBJECT(tmp_widget), "cfg_opt", &(cfg->show_bookmarks));
- g_signal_connect(G_OBJECT(tmp_widget), "toggled",
- G_CALLBACK(pcfg_model_cb), cfg);
+ exo_mutual_binding_new (G_OBJECT (cfg), "show-bookmarks",
+ G_OBJECT (tmp_widget), "active");
gtk_widget_show(tmp_widget);
gtk_box_pack_start(GTK_BOX(vbox_menu), tmp_widget, FALSE, FALSE, 0);
@@ -487,11 +538,8 @@ places_cfg_open_dialog(PlacesCfg *cfg)
#if USE_RECENT_DOCUMENTS
/* MENU: Show Recent Documents */
tmp_widget = gtk_check_button_new_with_mnemonic(_("Show recent _documents"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tmp_widget), cfg->show_recent);
-
- g_object_set_data(G_OBJECT(tmp_widget), "cfg_opt", &(cfg->show_recent));
- g_signal_connect(G_OBJECT(tmp_widget), "toggled",
- G_CALLBACK(pcfg_menu_cb), cfg);
+ exo_mutual_binding_new (G_OBJECT (cfg), "show-recent",
+ G_OBJECT (tmp_widget), "active");
gtk_widget_show(tmp_widget);
gtk_box_pack_start(GTK_BOX(vbox_menu), tmp_widget, FALSE, FALSE, 0);
@@ -501,19 +549,16 @@ places_cfg_open_dialog(PlacesCfg *cfg)
gtk_widget_show(vbox_recent);
/* Gray out this box when "Show recent documents" is off */
- gtk_widget_set_sensitive(vbox_recent, cfg->show_recent);
- g_object_set_data(G_OBJECT(tmp_widget), "cfg_transient", vbox_recent);
+ exo_binding_new (G_OBJECT (cfg), "show-recent",
+ G_OBJECT (vbox_recent), "sensitive");
frame_recent = xfce_gtk_frame_box_new_with_content(_("Recent Documents"), vbox_recent);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), frame_recent, FALSE, FALSE, 0);
/* RECENT DOCUMENTS: Show clear option */
tmp_widget = gtk_check_button_new_with_mnemonic(_("Show cl_ear option"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tmp_widget), cfg->show_recent_clear);
-
- g_object_set_data(G_OBJECT(tmp_widget), "cfg_opt", &(cfg->show_recent_clear));
- g_signal_connect(G_OBJECT(tmp_widget), "toggled",
- G_CALLBACK(pcfg_menu_cb), cfg);
+ exo_mutual_binding_new (G_OBJECT (cfg), "show-recent-clear",
+ G_OBJECT (tmp_widget), "active");
gtk_widget_show(tmp_widget);
gtk_box_pack_start(GTK_BOX(vbox_recent), tmp_widget, FALSE, FALSE, 0);
@@ -532,8 +577,8 @@ places_cfg_open_dialog(PlacesCfg *cfg)
tmp_widget = gtk_spin_button_new(GTK_ADJUSTMENT(adj), 1, 0);
gtk_label_set_mnemonic_widget(GTK_LABEL(tmp_label), tmp_widget);
- g_signal_connect(G_OBJECT(adj), "value-changed",
- G_CALLBACK(pcfg_recent_num_cb), cfg);
+ exo_mutual_binding_new (G_OBJECT (cfg), "show-recent-number",
+ G_OBJECT (adj), "value");
gtk_widget_show(tmp_widget);
gtk_box_pack_start(GTK_BOX(tmp_box), tmp_widget, FALSE, FALSE, 0);
@@ -557,10 +602,8 @@ places_cfg_open_dialog(PlacesCfg *cfg)
tmp_widget = gtk_entry_new();
gtk_label_set_mnemonic_widget(GTK_LABEL(tmp_label), tmp_widget);
- gtk_entry_set_text(GTK_ENTRY(tmp_widget), cfg->search_cmd);
-
- g_signal_connect(G_OBJECT(tmp_widget), "focus-out-event",
- G_CALLBACK(pcfg_search_cmd_cb), cfg);
+ exo_mutual_binding_new (G_OBJECT (cfg), "search-cmd",
+ G_OBJECT (tmp_widget), "text");
gtk_widget_show(tmp_widget);
gtk_box_pack_start(GTK_BOX(tmp_box), tmp_widget, FALSE, FALSE, 0);
@@ -581,34 +624,66 @@ places_cfg_finalize (GObject *object)
if(cfg->search_cmd != NULL)
g_free(cfg->search_cmd);
- if(cfg->read_path != NULL)
- g_free(cfg->read_path);
- if(cfg->write_path != NULL)
- g_free(cfg->write_path);
-
+ xfconf_shutdown();
G_OBJECT_CLASS (places_cfg_parent_class)->finalize (object);
}
PlacesCfg*
-places_cfg_new(XfcePanelPlugin *plugin, PlacesViewCfgIface *view_iface)
+places_cfg_new(XfcePanelPlugin *plugin)
{
- PlacesCfg *cfg;
-
- g_assert(view_iface != NULL);
+ PlacesCfg *cfg;
+ XfconfChannel *channel;
+ gchar *property;
cfg = g_object_new (XFCE_TYPE_PLACES_CFG, NULL);
cfg->plugin = plugin;
- cfg->view_iface = view_iface;
- cfg->read_path = xfce_panel_plugin_lookup_rc_file(plugin);
- cfg->write_path = xfce_panel_plugin_save_location(plugin, TRUE);
+ xfconf_init(NULL);
+ channel = xfconf_channel_get ("xfce4-panel");
+
+ property = g_strconcat (xfce_panel_plugin_get_property_base (plugin), "/show-button-type", NULL);
+ xfconf_g_property_bind (channel, property, G_TYPE_INT, cfg, "show-button-type");
+ g_free (property);
+
+ property = g_strconcat (xfce_panel_plugin_get_property_base (plugin), "/button-label", NULL);
+ xfconf_g_property_bind (channel, property, G_TYPE_STRING, cfg, "button-label");
+ g_free (property);
+
+ property = g_strconcat (xfce_panel_plugin_get_property_base (plugin), "/show-icons", NULL);
+ xfconf_g_property_bind (channel, property, G_TYPE_BOOLEAN, cfg, "show-icons");
+ g_free (property);
- pcfg_load(cfg);
+ property = g_strconcat (xfce_panel_plugin_get_property_base (plugin), "/show-volumes", NULL);
+ xfconf_g_property_bind (channel, property, G_TYPE_BOOLEAN, cfg, "show-volumes");
+ g_free (property);
+
+ property = g_strconcat (xfce_panel_plugin_get_property_base (plugin), "/mount-open-volumes", NULL);
+ xfconf_g_property_bind (channel, property, G_TYPE_BOOLEAN, cfg, "mount-open-volumes");
+ g_free (property);
+
+ property = g_strconcat (xfce_panel_plugin_get_property_base (plugin), "/show-bookmarks", NULL);
+ xfconf_g_property_bind (channel, property, G_TYPE_BOOLEAN, cfg, "show-bookmarks");
+ g_free (property);
+
+ property = g_strconcat (xfce_panel_plugin_get_property_base (plugin), "/show-recent", NULL);
+ xfconf_g_property_bind (channel, property, G_TYPE_BOOLEAN, cfg, "show-recent");
+ g_free (property);
+
+ property = g_strconcat (xfce_panel_plugin_get_property_base (plugin), "/show-recent-clear", NULL);
+ xfconf_g_property_bind (channel, property, G_TYPE_BOOLEAN, cfg, "show-recent-clear");
+ g_free (property);
+
+ property = g_strconcat (xfce_panel_plugin_get_property_base (plugin), "/show-recent-number", NULL);
+ xfconf_g_property_bind (channel, property, G_TYPE_INT, cfg, "show-recent-number");
+ g_free (property);
+
+ property = g_strconcat (xfce_panel_plugin_get_property_base (plugin), "/search-cmd", NULL);
+ xfconf_g_property_bind (channel, property, G_TYPE_STRING, cfg, "search-cmd");
+ g_free (property);
g_signal_connect_swapped(G_OBJECT(plugin), "configure-plugin",
G_CALLBACK(places_cfg_open_dialog), cfg);
- g_signal_connect_swapped(G_OBJECT(plugin), "save",
- G_CALLBACK(places_cfg_save), cfg);
+
xfce_panel_plugin_menu_show_configure(plugin);
return cfg;
diff --git a/panel-plugin/cfg.h b/panel-plugin/cfg.h
index 15afa51..54f1eef 100644
--- a/panel-plugin/cfg.h
+++ b/panel-plugin/cfg.h
@@ -3,6 +3,7 @@
* Defines the struct holding configuration data.
*
* Copyright (c) 2007-2008 Diego Ongaro <ongardie at gmail.com>
+ * Copyright (c) 2012 Andrzej <ndrwrdck at gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -44,9 +45,6 @@ struct _PlacesCfg
/* "private" */
XfcePanelPlugin *plugin;
- PlacesViewCfgIface *view_iface;
- gchar *read_path;
- gchar *write_path;
/* "public" for view's access */
gboolean show_button_icon;
@@ -80,7 +78,7 @@ void
places_cfg_save(PlacesCfg*);
PlacesCfg*
-places_cfg_new(XfcePanelPlugin*, PlacesViewCfgIface*);
+places_cfg_new(XfcePanelPlugin*);
G_END_DECLS
diff --git a/panel-plugin/view.c b/panel-plugin/view.c
index 802ea36..1b394f8 100644
--- a/panel-plugin/view.c
+++ b/panel-plugin/view.c
@@ -3,6 +3,7 @@
* This file handles the GUI. It "owns" the model and cfg.
*
* Copyright (c) 2007-2009 Diego Ongaro <ongardie at gmail.com>
+ * Copyright (c) 2012 Andrzej <ndrwrdck at gmail.com>
*
* Largely based on:
*
@@ -71,15 +72,6 @@
#include "model_volumes_notify.h"
#endif
-struct _PlacesViewCfgIface
-{
- PlacesView *places_view;
-
- void (*update_menu) (PlacesView*);
- void (*update_button) (PlacesView*);
- void (*reconfigure_model) (PlacesView*);
-};
-
struct _PlacesView
{
/* plugin */
@@ -87,7 +79,6 @@ struct _PlacesView
/* configuration */
PlacesCfg *cfg;
- PlacesViewCfgIface *view_cfg_iface;
/* view */
GtkWidget *button;
@@ -141,26 +132,6 @@ static void pview_update_menu(PlacesView*);
static void pview_destroy_menu(PlacesView*);
static void pview_button_update(PlacesView*);
-/********** Interface for Cfg's Use **********/
-
-inline void
-places_view_cfg_iface_update_menu(PlacesViewCfgIface *iface)
-{
- iface->update_menu(iface->places_view);
-}
-
-inline void
-places_view_cfg_iface_update_button(PlacesViewCfgIface *iface)
-{
- iface->update_button(iface->places_view);
-}
-
-inline void
-places_view_cfg_iface_reconfigure_model(PlacesViewCfgIface *iface)
-{
- iface->reconfigure_model(iface->places_view);
-}
-
/********** Model Management **********/
static void
pview_destroy_model(PlacesView *view)
@@ -435,8 +406,11 @@ pview_cb_recent_changed(GtkRecentManager *recent_manager, GtkWidget *recent_menu
gtk_menu_popdown(GTK_MENU(recent_menu));
}
else {
- while (gtk_events_pending())
- gtk_main_iteration();
+ /* Disabled */
+ /* Causes plugin to crash when search-cmd text field is edited */
+ /* (backspace key is pressed) */
+ /* while (gtk_events_pending())*/
+ /* gtk_main_iteration();*/
gtk_menu_reposition(GTK_MENU(recent_menu));
}
@@ -972,7 +946,6 @@ PlacesView*
places_view_init(XfcePanelPlugin *plugin)
{
PlacesView *view; /* internal use in this file */
- PlacesViewCfgIface *view_cfg_iface; /* given to cfg */
DBG("initializing");
g_assert(plugin != NULL);
@@ -980,14 +953,13 @@ places_view_init(XfcePanelPlugin *plugin)
view = g_new0(PlacesView, 1);
view->plugin = plugin;
- view_cfg_iface = g_new0(PlacesViewCfgIface, 1);
- view_cfg_iface->places_view = view;
- view_cfg_iface->update_menu = pview_update_menu;
- view_cfg_iface->update_button = pview_button_update;
- view_cfg_iface->reconfigure_model = pview_reconfigure_model;
- view->view_cfg_iface = view_cfg_iface;
-
- view->cfg = places_cfg_new(view->plugin, view_cfg_iface);
+ view->cfg = places_cfg_new(view->plugin);
+ g_signal_connect_swapped (G_OBJECT (view->cfg), "button-changed",
+ G_CALLBACK (pview_button_update), view);
+ g_signal_connect_swapped (G_OBJECT (view->cfg), "menu-changed",
+ G_CALLBACK (pview_update_menu), view);
+ g_signal_connect_swapped (G_OBJECT (view->cfg), "model-changed",
+ G_CALLBACK (pview_reconfigure_model), view);
pview_reconfigure_model(view);
@@ -1057,9 +1029,6 @@ places_view_finalize(PlacesView *view)
g_object_unref(view->cfg);
view->cfg = NULL;
- g_free(view->view_cfg_iface);
- view->view_cfg_iface = NULL;
-
g_free(view);
#ifdef HAVE_LIBNOTIFY
diff --git a/panel-plugin/view.h b/panel-plugin/view.h
index 12ac0d5..50bc076 100644
--- a/panel-plugin/view.h
+++ b/panel-plugin/view.h
@@ -4,6 +4,7 @@
* Headers for interface by which places.c creates/destroys view.
*
* Copyright (c) 2007-2008 Diego Ongaro <ongardie at gmail.com>
+ * Copyright (c) 2012 Andrzej <ndrwrdck at gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -31,19 +32,6 @@
typedef struct _PlacesView PlacesView;
-/* Interface for cfg */
-typedef struct _PlacesViewCfgIface PlacesViewCfgIface;
-
-inline void
-places_view_cfg_iface_update_menu(PlacesViewCfgIface*);
-
-inline void
-places_view_cfg_iface_update_button(PlacesViewCfgIface*);
-
-inline void
-places_view_cfg_iface_reconfigure_model(PlacesViewCfgIface*);
-
-
/* Init & Finalize */
PlacesView*
places_view_init(XfcePanelPlugin*);
More information about the Xfce4-commits
mailing list