[Xfce4-commits] <xfce4-panel:devel> Add gtk builder code of the plugins in a common file.
Nick Schermer
noreply at xfce.org
Fri Sep 25 20:02:05 CEST 2009
Updating branch refs/heads/devel
to ece338717176aab265d1c02af96719816a44b7dc (commit)
from 778f7b9b87d923f511a74759e3e51ee4637bab4a (commit)
commit ece338717176aab265d1c02af96719816a44b7dc
Author: Nick Schermer <nick at xfce.org>
Date: Thu Sep 24 20:12:49 2009 +0200
Add gtk builder code of the plugins in a common file.
common/Makefile.am | 8 +-
common/panel-builder.c | 80 +++++++++
.../panel-builder.h | 27 +--
plugins/actions/actions.c | 72 ++++-----
plugins/launcher/launcher-dialog.c | 168 +++++++++-----------
plugins/pager/pager.c | 71 +++-----
plugins/separator/separator.c | 39 ++---
plugins/systray/systray.c | 60 +++-----
plugins/tasklist/tasklist.c | 67 +++-----
plugins/windowmenu/windowmenu.c | 45 ++----
10 files changed, 303 insertions(+), 334 deletions(-)
diff --git a/common/Makefile.am b/common/Makefile.am
index a4805de..3da0d91 100644
--- a/common/Makefile.am
+++ b/common/Makefile.am
@@ -10,18 +10,22 @@ noinst_LTLIBRARIES = \
libpanel-xfconf.la
libpanel_xfconf_la_SOURCES = \
+ panel-builder.c \
+ panel-builder.h \
panel-xfconf.c \
panel-xfconf.h
libpanel_xfconf_la_CFLAGS = \
- $(XFCONF_CFLAGS)
+ $(XFCONF_CFLAGS) \
+ $(GTK_CFLAGS)
libpanel_xfconf_la_LDFLAGS = \
-no-undefined \
$(PLATFORM_LDFLAGS)
libpanel_xfconf_la_LIBADD = \
- $(XFCONF_LIBS)
+ $(XFCONF_LIBS) \
+ $(GTK_LIBS)
EXTRA_DIST = \
panel-dbus.h \
diff --git a/common/panel-builder.c b/common/panel-builder.c
new file mode 100644
index 0000000..44aeb44
--- /dev/null
+++ b/common/panel-builder.c
@@ -0,0 +1,80 @@
+/* $Id$ */
+/*
+ * Copyright (C) 2009 Nick Schermer <nick at xfce.org>
+ *
+ * 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <common/panel-builder.h>
+
+
+
+GtkBuilder *
+panel_builder_new (XfcePanelPlugin *panel_plugin,
+ const gchar *buffer,
+ gsize length,
+ GObject **dialog_return)
+{
+ GError *error = NULL;
+ GtkBuilder *builder;
+ GObject *dialog, *button;
+
+ panel_return_val_if_fail (XFCE_IS_PANEL_PLUGIN (panel_plugin), NULL);
+
+ builder = gtk_builder_new ();
+ if (gtk_builder_add_from_string (builder, buffer, length, &error))
+ {
+ dialog = gtk_builder_get_object (builder, "dialog");
+ if (G_LIKELY (dialog != NULL))
+ {
+ g_object_weak_ref (G_OBJECT (dialog),
+ (GWeakNotify) g_object_unref, builder);
+ xfce_panel_plugin_take_window (panel_plugin, GTK_WINDOW (dialog));
+
+ xfce_panel_plugin_block_menu (panel_plugin);
+ g_object_weak_ref (G_OBJECT (dialog),
+ (GWeakNotify) xfce_panel_plugin_unblock_menu,
+ panel_plugin);
+
+ button = gtk_builder_get_object (builder, "close-button");
+ if (G_LIKELY (button != NULL))
+ g_signal_connect_swapped (G_OBJECT (button), "clicked",
+ G_CALLBACK (gtk_widget_destroy), dialog);
+
+ if (G_LIKELY (dialog_return != NULL))
+ *dialog_return = dialog;
+
+ return builder;
+ }
+ else
+ {
+ g_set_error_literal (&error, 0, 0, "No widget with the name \"dialog\" found");
+ }
+ }
+
+ g_critical ("Faild to construct the builder for plugin %s-%d: %s.",
+ xfce_panel_plugin_get_name (panel_plugin),
+ xfce_panel_plugin_get_unique_id (panel_plugin),
+ error->message);
+ g_error_free (error);
+ g_object_unref (G_OBJECT (builder));
+
+ return NULL;
+}
+
diff --git a/libxfce4panel/xfce-panel-convenience.h b/common/panel-builder.h
similarity index 52%
copy from libxfce4panel/xfce-panel-convenience.h
copy to common/panel-builder.h
index 5c25f5b..a621019 100644
--- a/libxfce4panel/xfce-panel-convenience.h
+++ b/common/panel-builder.h
@@ -1,7 +1,6 @@
/* $Id$ */
/*
- * Copyright (C) 2006-2007 Jasper Huijsmans <jasper at xfce.org>
- * Copyright (C) 2008-2009 Nick Schermer <nick at xfce.org>
+ * Copyright (C) 2009 Nick Schermer <nick at xfce.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -18,23 +17,15 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#if !defined(LIBXFCE4PANEL_INSIDE_LIBXFCE4PANEL_H) && !defined(LIBXFCE4PANEL_COMPILATION)
-#error "Only <libxfce4panel/libxfce4panel.h> can be included directly, this file may disappear or change contents"
-#endif
-
-#ifndef __XFCE_PANEL_CONVENIENCE_H__
-#define __XFCE_PANEL_CONVENIENCE_H__
+#ifndef __PANEL_BUILDER_H__
+#define __PANEL_BUILDER_H__
#include <gtk/gtk.h>
+#include <libxfce4panel/libxfce4panel.h>
-G_BEGIN_DECLS
-
-GtkWidget *xfce_panel_create_button (void) G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT;
-
-GtkWidget *xfce_panel_create_toggle_button (void) G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT;
-
-gboolean xfce_panel_allow_customization (void);
-
-G_END_DECLS
+GtkBuilder *panel_builder_new (XfcePanelPlugin *panel_plugin,
+ const gchar *buffer,
+ gsize length,
+ GObject **dialog_return) G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT;
-#endif /* !__XFCE_PANEL_CONVENIENCE_H__ */
+#endif /* !__PANEL_BUILDER_H__ */
diff --git a/plugins/actions/actions.c b/plugins/actions/actions.c
index 3ccf791..78268fc 100644
--- a/plugins/actions/actions.c
+++ b/plugins/actions/actions.c
@@ -26,6 +26,7 @@
#include <libxfce4util/libxfce4util.h>
#include <libxfce4ui/libxfce4ui.h>
#include <common/panel-xfconf.h>
+#include <common/panel-builder.h>
#include <exo/exo.h>
#include "actions.h"
@@ -355,50 +356,33 @@ actions_plugin_configure_plugin (XfcePanelPlugin *panel_plugin)
panel_return_if_fail (XFCE_IS_ACTIONS_PLUGIN (plugin));
- /* load the dialog from the ui file */
- builder = gtk_builder_new ();
- if (gtk_builder_add_from_string (builder, actions_dialog_ui,
- actions_dialog_ui_length, NULL))
- {
- dialog = gtk_builder_get_object (builder, "dialog");
- g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify) g_object_unref, builder);
- xfce_panel_plugin_take_window (panel_plugin, GTK_WINDOW (dialog));
-
- xfce_panel_plugin_block_menu (panel_plugin);
- g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify)
- xfce_panel_plugin_unblock_menu, panel_plugin);
-
- object = gtk_builder_get_object (builder, "close-button");
- g_signal_connect_swapped (G_OBJECT (object), "clicked",
- G_CALLBACK (gtk_widget_destroy), dialog);
-
- /* populate the first store */
- object = gtk_builder_get_object (builder, "first-action-model");
- for (i = 1; i < G_N_ELEMENTS (action_entries); i++)
- gtk_list_store_insert_with_values (GTK_LIST_STORE (object), NULL, i - 1,
- 0, _(action_entries[i].title), -1);
-
- object = gtk_builder_get_object (builder, "first-action");
- exo_mutual_binding_new (G_OBJECT (plugin), "first-action",
- G_OBJECT (object), "active");
-
- /* populate the second store */
- object = gtk_builder_get_object (builder, "second-action-model");
- for (i = 0; i < G_N_ELEMENTS (action_entries); i++)
- gtk_list_store_insert_with_values (GTK_LIST_STORE (object), NULL, i,
- 0, _(action_entries[i].title), -1);
-
- object = gtk_builder_get_object (builder, "second-action");
- exo_mutual_binding_new (G_OBJECT (plugin), "second-action",
- G_OBJECT (object), "active");
-
- gtk_widget_show (GTK_WIDGET (dialog));
- }
- else
- {
- /* release the builder */
- g_object_unref (G_OBJECT (builder));
- }
+ /* setup the dialog */
+ builder = panel_builder_new (panel_plugin, actions_dialog_ui,
+ actions_dialog_ui_length, &dialog);
+ if (G_UNLIKELY (builder == NULL))
+ return;
+
+ /* populate the first store */
+ object = gtk_builder_get_object (builder, "first-action-model");
+ for (i = 1; i < G_N_ELEMENTS (action_entries); i++)
+ gtk_list_store_insert_with_values (GTK_LIST_STORE (object), NULL, i - 1,
+ 0, _(action_entries[i].title), -1);
+
+ object = gtk_builder_get_object (builder, "first-action");
+ exo_mutual_binding_new (G_OBJECT (plugin), "first-action",
+ G_OBJECT (object), "active");
+
+ /* populate the second store */
+ object = gtk_builder_get_object (builder, "second-action-model");
+ for (i = 0; i < G_N_ELEMENTS (action_entries); i++)
+ gtk_list_store_insert_with_values (GTK_LIST_STORE (object), NULL, i,
+ 0, _(action_entries[i].title), -1);
+
+ object = gtk_builder_get_object (builder, "second-action");
+ exo_mutual_binding_new (G_OBJECT (plugin), "second-action",
+ G_OBJECT (object), "active");
+
+ gtk_widget_show (GTK_WIDGET (dialog));
}
diff --git a/plugins/launcher/launcher-dialog.c b/plugins/launcher/launcher-dialog.c
index c1c41fb..71cf15c 100644
--- a/plugins/launcher/launcher-dialog.c
+++ b/plugins/launcher/launcher-dialog.c
@@ -32,6 +32,7 @@
#include <xfconf/xfconf.h>
#include <common/panel-private.h>
+#include <common/panel-builder.h>
#include "launcher.h"
#include "launcher-dialog.h"
@@ -574,12 +575,8 @@ launcher_dialog_response (GtkWidget *widget,
/* disconnect from the menu items */
launcher_dialog_items_unload (dialog);
- /* destroy the dialog and release the builder */
+ /* destroy the dialog */
gtk_widget_destroy (widget);
- g_object_unref (G_OBJECT (dialog->builder));
-
- /* unblock plugin menu */
- xfce_panel_plugin_unblock_menu (XFCE_PANEL_PLUGIN (dialog->plugin));
/* cleanup */
g_slice_free (LauncherPluginDialog, dialog);
@@ -745,96 +742,85 @@ launcher_dialog_show (LauncherPlugin *plugin)
panel_return_if_fail (XFCE_IS_LAUNCHER_PLUGIN (plugin));
- builder = gtk_builder_new ();
- if (gtk_builder_add_from_string (builder, launcher_dialog_ui,
- launcher_dialog_ui_length, NULL))
- {
- /* create structure */
- dialog = g_slice_new0 (LauncherPluginDialog);
- dialog->builder = builder;
- dialog->plugin = plugin;
- dialog->items = NULL;
-
- /* block plugin menu */
- xfce_panel_plugin_block_menu (XFCE_PANEL_PLUGIN (plugin));
-
- /* get dialog from builder, release builder when dialog is destroyed */
- window = gtk_builder_get_object (builder, "dialog");
- xfce_panel_plugin_take_window (XFCE_PANEL_PLUGIN (plugin), GTK_WINDOW (window));
- g_signal_connect (G_OBJECT (window), "response",
- G_CALLBACK (launcher_dialog_response), dialog);
-
- /* connect item buttons */
- for (i = 0; i < G_N_ELEMENTS (button_names); i++)
- {
- object = gtk_builder_get_object (builder, button_names[i]);
- panel_return_if_fail (GTK_IS_WIDGET (object));
- g_signal_connect (G_OBJECT (object), "clicked",
- G_CALLBACK (launcher_dialog_item_button_clicked), dialog);
- }
-
- /* setup treeview selection */
- object = gtk_builder_get_object (builder, "item-treeview");
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (object));
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
- g_signal_connect (G_OBJECT (selection), "changed",
- G_CALLBACK (launcher_dialog_tree_selection_changed), dialog);
- launcher_dialog_tree_selection_changed (selection, dialog);
+ /* setup the dialog */
+ builder = panel_builder_new (XFCE_PANEL_PLUGIN (plugin), launcher_dialog_ui,
+ launcher_dialog_ui_length, &window);
+ if (G_UNLIKELY (builder == NULL))
+ return;
- /* connect bindings to the advanced properties */
- for (i = 0; i < G_N_ELEMENTS (binding_names); i++)
- {
- object = gtk_builder_get_object (builder, binding_names[i]);
- panel_return_if_fail (GTK_IS_WIDGET (object));
- exo_mutual_binding_new (G_OBJECT (plugin), binding_names[i],
- G_OBJECT (object), "active");
- }
+ /* create structure */
+ dialog = g_slice_new0 (LauncherPluginDialog);
+ dialog->builder = builder;
+ dialog->plugin = plugin;
+ dialog->items = NULL;
- /* setup responses for the add dialog */
- object = gtk_builder_get_object (builder, "dialog-add");
- g_signal_connect (G_OBJECT (object), "response",
- G_CALLBACK (launcher_dialog_add_response), dialog);
- g_signal_connect (G_OBJECT (object), "delete-event",
- G_CALLBACK (gtk_true), NULL);
-
- /* setup sorting in the add dialog */
- object = gtk_builder_get_object (builder, "add-store");
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (object),
- COL_NAME, GTK_SORT_ASCENDING);
-
- /* allow selecting multiple items in the add dialog */
- object = gtk_builder_get_object (builder, "add-treeview");
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (object));
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
- g_signal_connect (G_OBJECT (selection), "changed",
- G_CALLBACK (launcher_dialog_add_selection_changed), dialog);
-
- /* setup search filter in the add dialog */
- object = gtk_builder_get_object (builder, "add-store-filter");
- item = gtk_builder_get_object (builder, "add-search");
- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (object),
- launcher_dialog_add_visible_function, item, NULL);
- g_signal_connect_swapped (G_OBJECT (item), "changed",
- G_CALLBACK (gtk_tree_model_filter_refilter), object);
-
- /* setup the icon size in the icon renderers */
- object = gtk_builder_get_object (builder, "addrenderericon");
- g_object_set (G_OBJECT (object), "stock-size", GTK_ICON_SIZE_DND, NULL);
- object = gtk_builder_get_object (builder, "itemrenderericon");
- g_object_set (G_OBJECT (object), "stock-size", GTK_ICON_SIZE_DND, NULL);
-
- /* load the plugin items */
- launcher_dialog_items_load (dialog);
- g_signal_connect_swapped (G_OBJECT (plugin), "items-changed",
- G_CALLBACK (launcher_dialog_items_load), dialog);
+ g_signal_connect (G_OBJECT (window), "response",
+ G_CALLBACK (launcher_dialog_response), dialog);
- /* show the dialog */
- gtk_widget_show (GTK_WIDGET (window));
+ /* connect item buttons */
+ for (i = 0; i < G_N_ELEMENTS (button_names); i++)
+ {
+ object = gtk_builder_get_object (builder, button_names[i]);
+ panel_return_if_fail (GTK_IS_WIDGET (object));
+ g_signal_connect (G_OBJECT (object), "clicked",
+ G_CALLBACK (launcher_dialog_item_button_clicked), dialog);
}
- else
+
+ /* setup treeview selection */
+ object = gtk_builder_get_object (builder, "item-treeview");
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (object));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
+ g_signal_connect (G_OBJECT (selection), "changed",
+ G_CALLBACK (launcher_dialog_tree_selection_changed), dialog);
+ launcher_dialog_tree_selection_changed (selection, dialog);
+
+ /* connect bindings to the advanced properties */
+ for (i = 0; i < G_N_ELEMENTS (binding_names); i++)
{
- /* release the builder and fire error */
- g_object_unref (G_OBJECT (builder));
- panel_assert_not_reached ();
+ object = gtk_builder_get_object (builder, binding_names[i]);
+ panel_return_if_fail (GTK_IS_WIDGET (object));
+ exo_mutual_binding_new (G_OBJECT (plugin), binding_names[i],
+ G_OBJECT (object), "active");
}
+
+ /* setup responses for the add dialog */
+ object = gtk_builder_get_object (builder, "dialog-add");
+ g_signal_connect (G_OBJECT (object), "response",
+ G_CALLBACK (launcher_dialog_add_response), dialog);
+ g_signal_connect (G_OBJECT (object), "delete-event",
+ G_CALLBACK (gtk_true), NULL);
+
+ /* setup sorting in the add dialog */
+ object = gtk_builder_get_object (builder, "add-store");
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (object),
+ COL_NAME, GTK_SORT_ASCENDING);
+
+ /* allow selecting multiple items in the add dialog */
+ object = gtk_builder_get_object (builder, "add-treeview");
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (object));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
+ g_signal_connect (G_OBJECT (selection), "changed",
+ G_CALLBACK (launcher_dialog_add_selection_changed), dialog);
+
+ /* setup search filter in the add dialog */
+ object = gtk_builder_get_object (builder, "add-store-filter");
+ item = gtk_builder_get_object (builder, "add-search");
+ gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (object),
+ launcher_dialog_add_visible_function, item, NULL);
+ g_signal_connect_swapped (G_OBJECT (item), "changed",
+ G_CALLBACK (gtk_tree_model_filter_refilter), object);
+
+ /* setup the icon size in the icon renderers */
+ object = gtk_builder_get_object (builder, "addrenderericon");
+ g_object_set (G_OBJECT (object), "stock-size", GTK_ICON_SIZE_DND, NULL);
+ object = gtk_builder_get_object (builder, "itemrenderericon");
+ g_object_set (G_OBJECT (object), "stock-size", GTK_ICON_SIZE_DND, NULL);
+
+ /* load the plugin items */
+ launcher_dialog_items_load (dialog);
+ g_signal_connect_swapped (G_OBJECT (plugin), "items-changed",
+ G_CALLBACK (launcher_dialog_items_load), dialog);
+
+ /* show the dialog */
+ gtk_widget_show (GTK_WIDGET (window));
}
diff --git a/plugins/pager/pager.c b/plugins/pager/pager.c
index b4db10a..d70f50c 100644
--- a/plugins/pager/pager.c
+++ b/plugins/pager/pager.c
@@ -27,6 +27,7 @@
#include <libxfce4util/libxfce4util.h>
#include <libxfce4ui/libxfce4ui.h>
#include <common/panel-xfconf.h>
+#include <common/panel-builder.h>
#include <libwnck/libwnck.h>
#include <exo/exo.h>
@@ -411,9 +412,6 @@ pager_plugin_configure_destroyed (gpointer data,
g_signal_handlers_disconnect_by_func (G_OBJECT (plugin->wnck_screen),
pager_plugin_configure_n_workspaces_changed,
where_the_object_was);
-
- /* unblock the menu */
- xfce_panel_plugin_unblock_menu (XFCE_PANEL_PLUGIN (plugin));
}
@@ -427,52 +425,37 @@ pager_plugin_configure_plugin (XfcePanelPlugin *panel_plugin)
panel_return_if_fail (XFCE_IS_PAGER_PLUGIN (plugin));
- /* load the dialog from the ui file */
- builder = gtk_builder_new ();
- if (gtk_builder_add_from_string (builder, pager_dialog_ui,
- pager_dialog_ui_length, NULL))
- {
- /* signals to monitor number of workspace changes */
- g_signal_connect (G_OBJECT (plugin->wnck_screen), "workspace-created",
- G_CALLBACK (pager_plugin_configure_n_workspaces_changed), builder);
- g_signal_connect (G_OBJECT (plugin->wnck_screen), "workspace-destroyed",
- G_CALLBACK (pager_plugin_configure_n_workspaces_changed), builder);
-
- xfce_panel_plugin_block_menu (panel_plugin);
- g_object_weak_ref (G_OBJECT (builder), pager_plugin_configure_destroyed, plugin);
+ /* setup the dialog */
+ builder = panel_builder_new (panel_plugin, pager_dialog_ui,
+ pager_dialog_ui_length, &dialog);
+ if (G_UNLIKELY (builder == NULL))
+ return;
- dialog = gtk_builder_get_object (builder, "dialog");
- g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify) g_object_unref, builder);
- xfce_panel_plugin_take_window (panel_plugin, GTK_WINDOW (dialog));
+ /* signals to monitor number of workspace changes */
+ g_signal_connect (G_OBJECT (plugin->wnck_screen), "workspace-created",
+ G_CALLBACK (pager_plugin_configure_n_workspaces_changed), builder);
+ g_signal_connect (G_OBJECT (plugin->wnck_screen), "workspace-destroyed",
+ G_CALLBACK (pager_plugin_configure_n_workspaces_changed), builder);
+ g_object_weak_ref (G_OBJECT (builder), pager_plugin_configure_destroyed, plugin);
- object = gtk_builder_get_object (builder, "close-button");
- g_signal_connect_swapped (G_OBJECT (object), "clicked",
- G_CALLBACK (gtk_widget_destroy), dialog);
+ object = gtk_builder_get_object (builder, "settings-button");
+ g_signal_connect (G_OBJECT (object), "clicked",
+ G_CALLBACK (pager_plugin_configure_workspace_settings), dialog);
- object = gtk_builder_get_object (builder, "settings-button");
- g_signal_connect (G_OBJECT (object), "clicked",
- G_CALLBACK (pager_plugin_configure_workspace_settings), dialog);
+ object = gtk_builder_get_object (builder, "workspace-scrolling");
+ exo_mutual_binding_new (G_OBJECT (plugin), "workspace-scrolling",
+ G_OBJECT (object), "active");
- object = gtk_builder_get_object (builder, "workspace-scrolling");
- exo_mutual_binding_new (G_OBJECT (plugin), "workspace-scrolling",
- G_OBJECT (object), "active");
+ object = gtk_builder_get_object (builder, "show-names");
+ exo_mutual_binding_new (G_OBJECT (plugin), "show-names",
+ G_OBJECT (object), "active");
- object = gtk_builder_get_object (builder, "show-names");
- exo_mutual_binding_new (G_OBJECT (plugin), "show-names",
- G_OBJECT (object), "active");
-
- object = gtk_builder_get_object (builder, "rows");
- exo_mutual_binding_new (G_OBJECT (plugin), "rows",
- G_OBJECT (object), "value");
+ object = gtk_builder_get_object (builder, "rows");
+ exo_mutual_binding_new (G_OBJECT (plugin), "rows",
+ G_OBJECT (object), "value");
- /* update the rows limit */
- pager_plugin_configure_n_workspaces_changed (plugin->wnck_screen, NULL, builder);
+ /* update the rows limit */
+ pager_plugin_configure_n_workspaces_changed (plugin->wnck_screen, NULL, builder);
- gtk_widget_show (GTK_WIDGET (dialog));
- }
- else
- {
- /* release the builder */
- g_object_unref (G_OBJECT (builder));
- }
+ gtk_widget_show (GTK_WIDGET (dialog));
}
diff --git a/plugins/separator/separator.c b/plugins/separator/separator.c
index baf36dd..6c893dc 100644
--- a/plugins/separator/separator.c
+++ b/plugins/separator/separator.c
@@ -26,6 +26,7 @@
#include <libxfce4panel/libxfce4panel.h>
#include <libxfce4util/libxfce4util.h>
#include <common/panel-xfconf.h>
+#include <common/panel-builder.h>
#include <exo/exo.h>
#include "separator.h"
@@ -313,35 +314,21 @@ separator_plugin_configure_plugin (XfcePanelPlugin *panel_plugin)
panel_return_if_fail (XFCE_IS_SEPARATOR_PLUGIN (plugin));
- /* load the dialog from the ui file */
- builder = gtk_builder_new ();
- if (gtk_builder_add_from_string (builder, separator_dialog_ui, separator_dialog_ui_length, NULL))
- {
- dialog = gtk_builder_get_object (builder, "dialog");
- g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify) g_object_unref, builder);
- xfce_panel_plugin_take_window (panel_plugin, GTK_WINDOW (dialog));
-
- xfce_panel_plugin_block_menu (panel_plugin);
- g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify) xfce_panel_plugin_unblock_menu, panel_plugin);
+ /* setup the dialog */
+ builder = panel_builder_new (panel_plugin, separator_dialog_ui,
+ separator_dialog_ui_length, &dialog);
+ if (G_UNLIKELY (builder == NULL))
+ return;
- object = gtk_builder_get_object (builder, "close-button");
- g_signal_connect_swapped (G_OBJECT (object), "clicked", G_CALLBACK (gtk_widget_destroy), dialog);
+ object = gtk_builder_get_object (builder, "style");
+ exo_mutual_binding_new (G_OBJECT (plugin), "style",
+ G_OBJECT (object), "active");
- object = gtk_builder_get_object (builder, "style");
- exo_mutual_binding_new (G_OBJECT (plugin), "style",
- G_OBJECT (object), "active");
+ object = gtk_builder_get_object (builder, "expand");
+ exo_mutual_binding_new (G_OBJECT (plugin), "expand",
+ G_OBJECT (object), "active");
- object = gtk_builder_get_object (builder, "expand");
- exo_mutual_binding_new (G_OBJECT (plugin), "expand",
- G_OBJECT (object), "active");
-
- gtk_widget_show (GTK_WIDGET (dialog));
- }
- else
- {
- /* release the builder */
- g_object_unref (G_OBJECT (builder));
- }
+ gtk_widget_show (GTK_WIDGET (dialog));
}
diff --git a/plugins/systray/systray.c b/plugins/systray/systray.c
index 2729f5a..839cd01 100644
--- a/plugins/systray/systray.c
+++ b/plugins/systray/systray.c
@@ -26,6 +26,7 @@
#include <libxfce4ui/libxfce4ui.h>
#include <common/panel-private.h>
#include <common/panel-xfconf.h>
+#include <common/panel-builder.h>
#include <exo/exo.h>
#include "systray.h"
@@ -451,44 +452,27 @@ systray_plugin_configure_plugin (XfcePanelPlugin *panel_plugin)
if (xfce_titled_dialog_get_type () == 0)
return;
- builder = gtk_builder_new ();
- if (gtk_builder_add_from_string (builder, systray_dialog_ui,
- systray_dialog_ui_length, NULL))
- {
- dialog = gtk_builder_get_object (builder, "dialog");
- g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify) g_object_unref, builder);
- xfce_panel_plugin_take_window (panel_plugin, GTK_WINDOW (dialog));
-
- xfce_panel_plugin_block_menu (panel_plugin);
- g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify)
- xfce_panel_plugin_unblock_menu, panel_plugin);
-
- object = gtk_builder_get_object (builder, "close-button");
- panel_return_if_fail (GTK_IS_WIDGET (object));
- g_signal_connect_swapped (G_OBJECT (object), "clicked",
- G_CALLBACK (gtk_widget_destroy), dialog);
-
- object = gtk_builder_get_object (builder, "rows");
- panel_return_if_fail (GTK_IS_WIDGET (object));
- exo_mutual_binding_new (G_OBJECT (plugin), "rows",
- G_OBJECT (object), "value");
-
- object = gtk_builder_get_object (builder, "show-frame");
- panel_return_if_fail (GTK_IS_WIDGET (object));
- exo_mutual_binding_new (G_OBJECT (plugin), "show-frame",
- G_OBJECT (object), "active");
-
- object = gtk_builder_get_object (builder, "applications-store");
- panel_return_if_fail (GTK_IS_LIST_STORE (object));
- systray_plugin_dialog_add_application_names (plugin, GTK_LIST_STORE (object));
-
- gtk_widget_show (GTK_WIDGET (dialog));
- }
- else
- {
- /* release the builder */
- g_object_unref (G_OBJECT (builder));
- }
+ /* setup the dialog */
+ builder = panel_builder_new (panel_plugin, systray_dialog_ui,
+ systray_dialog_ui_length, &dialog);
+ if (G_UNLIKELY (builder == NULL))
+ return;
+
+ object = gtk_builder_get_object (builder, "rows");
+ panel_return_if_fail (GTK_IS_WIDGET (object));
+ exo_mutual_binding_new (G_OBJECT (plugin), "rows",
+ G_OBJECT (object), "value");
+
+ object = gtk_builder_get_object (builder, "show-frame");
+ panel_return_if_fail (GTK_IS_WIDGET (object));
+ exo_mutual_binding_new (G_OBJECT (plugin), "show-frame",
+ G_OBJECT (object), "active");
+
+ object = gtk_builder_get_object (builder, "applications-store");
+ panel_return_if_fail (GTK_IS_LIST_STORE (object));
+ systray_plugin_dialog_add_application_names (plugin, GTK_LIST_STORE (object));
+
+ gtk_widget_show (GTK_WIDGET (dialog));
}
diff --git a/plugins/tasklist/tasklist.c b/plugins/tasklist/tasklist.c
index d1f5b45..b93e9a0 100644
--- a/plugins/tasklist/tasklist.c
+++ b/plugins/tasklist/tasklist.c
@@ -24,6 +24,7 @@
#include <exo/exo.h>
#include <libxfce4ui/libxfce4ui.h>
#include <common/panel-xfconf.h>
+#include <common/panel-builder.h>
#include <libxfce4panel/libxfce4panel.h>
#include "tasklist-widget.h"
@@ -180,51 +181,35 @@ tasklist_plugin_configure_plugin (XfcePanelPlugin *panel_plugin)
GObject *dialog;
GObject *object;
- builder = gtk_builder_new ();
- if (gtk_builder_add_from_string (builder, tasklist_dialog_ui,
- tasklist_dialog_ui_length, NULL))
- {
- dialog = gtk_builder_get_object (builder, "dialog");
- g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify) g_object_unref, builder);
- xfce_panel_plugin_take_window (panel_plugin, GTK_WINDOW (dialog));
-
- xfce_panel_plugin_block_menu (panel_plugin);
- g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify)
- xfce_panel_plugin_unblock_menu, panel_plugin);
-
- object = gtk_builder_get_object (builder, "close-button");
- g_signal_connect_swapped (G_OBJECT (object), "clicked",
- G_CALLBACK (gtk_widget_destroy), dialog);
+ /* setup the dialog */
+ builder = panel_builder_new (panel_plugin, tasklist_dialog_ui,
+ tasklist_dialog_ui_length, &dialog);
+ if (G_UNLIKELY (builder == NULL))
+ return;
#define TASKLIST_DIALOG_BIND(name, property) \
- object = gtk_builder_get_object (builder, (name)); \
- panel_return_if_fail (G_IS_OBJECT (object)); \
- exo_mutual_binding_new (G_OBJECT (plugin->tasklist), (name), \
- G_OBJECT (object), (property));
+ object = gtk_builder_get_object (builder, (name)); \
+ panel_return_if_fail (G_IS_OBJECT (object)); \
+ exo_mutual_binding_new (G_OBJECT (plugin->tasklist), (name), \
+ G_OBJECT (object), (property));
#define TASKLIST_DIALOG_BIND_INV(name, property) \
- object = gtk_builder_get_object (builder, (name)); \
- panel_return_if_fail (G_IS_OBJECT (object)); \
- exo_mutual_binding_new_with_negation (G_OBJECT (plugin->tasklist), \
- name, G_OBJECT (object), \
- property);
-
- TASKLIST_DIALOG_BIND ("show-labels", "active")
- TASKLIST_DIALOG_BIND ("grouping", "active")
- TASKLIST_DIALOG_BIND ("include-all-workspaces", "active")
- TASKLIST_DIALOG_BIND ("flat-buttons", "active")
- TASKLIST_DIALOG_BIND_INV ("switch-workspace-on-unminimize", "active")
- TASKLIST_DIALOG_BIND ("show-only-minimized", "active")
- TASKLIST_DIALOG_BIND ("show-wireframes", "active")
- TASKLIST_DIALOG_BIND ("show-handle", "active")
-
- gtk_widget_show (GTK_WIDGET (dialog));
- }
- else
- {
- /* release the builder */
- g_object_unref (G_OBJECT (builder));
- }
+ object = gtk_builder_get_object (builder, (name)); \
+ panel_return_if_fail (G_IS_OBJECT (object)); \
+ exo_mutual_binding_new_with_negation (G_OBJECT (plugin->tasklist), \
+ name, G_OBJECT (object), \
+ property);
+
+ TASKLIST_DIALOG_BIND ("show-labels", "active")
+ TASKLIST_DIALOG_BIND ("grouping", "active")
+ TASKLIST_DIALOG_BIND ("include-all-workspaces", "active")
+ TASKLIST_DIALOG_BIND ("flat-buttons", "active")
+ TASKLIST_DIALOG_BIND_INV ("switch-workspace-on-unminimize", "active")
+ TASKLIST_DIALOG_BIND ("show-only-minimized", "active")
+ TASKLIST_DIALOG_BIND ("show-wireframes", "active")
+ TASKLIST_DIALOG_BIND ("show-handle", "active")
+
+ gtk_widget_show (GTK_WIDGET (dialog));
}
diff --git a/plugins/windowmenu/windowmenu.c b/plugins/windowmenu/windowmenu.c
index d9a1d66..08a81d5 100644
--- a/plugins/windowmenu/windowmenu.c
+++ b/plugins/windowmenu/windowmenu.c
@@ -26,6 +26,7 @@
#include <libxfce4panel/libxfce4panel.h>
#include <libwnck/libwnck.h>
#include <common/panel-xfconf.h>
+#include <common/panel-builder.h>
#include <gdk/gdkkeysyms.h>
#include <common/panel-private.h>
@@ -493,38 +494,22 @@ window_menu_plugin_configure_plugin (XfcePanelPlugin *panel_plugin)
"urgentcy-notification", "all-workspaces",
"style" };
- builder = gtk_builder_new ();
- if (gtk_builder_add_from_string (builder, windowmenu_dialog_ui,
- windowmenu_dialog_ui_length, NULL))
- {
- dialog = gtk_builder_get_object (builder, "dialog");
- g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify) g_object_unref, builder);
- xfce_panel_plugin_take_window (panel_plugin, GTK_WINDOW (dialog));
-
- xfce_panel_plugin_block_menu (panel_plugin);
- g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify)
- xfce_panel_plugin_unblock_menu, panel_plugin);
-
- object = gtk_builder_get_object (builder, "close-button");
- g_signal_connect_swapped (G_OBJECT (object), "clicked",
- G_CALLBACK (gtk_widget_destroy), dialog);
-
- /* connect bindings */
- for (i = 0; i < G_N_ELEMENTS (names); i++)
- {
- object = gtk_builder_get_object (builder, names[i]);
- panel_return_if_fail (GTK_IS_WIDGET (object));
- exo_mutual_binding_new (G_OBJECT (plugin), names[i],
- G_OBJECT (object), "active");
- }
+ /* setup the dialog */
+ builder = panel_builder_new (panel_plugin, windowmenu_dialog_ui,
+ windowmenu_dialog_ui_length, &dialog);
+ if (G_UNLIKELY (builder == NULL))
+ return;
- gtk_widget_show (GTK_WIDGET (dialog));
- }
- else
+ /* connect bindings */
+ for (i = 0; i < G_N_ELEMENTS (names); i++)
{
- /* release the builder */
- g_object_unref (G_OBJECT (builder));
+ object = gtk_builder_get_object (builder, names[i]);
+ panel_return_if_fail (GTK_IS_WIDGET (object));
+ exo_mutual_binding_new (G_OBJECT (plugin), names[i],
+ G_OBJECT (object), "active");
}
+
+ gtk_widget_show (GTK_WIDGET (dialog));
}
More information about the Xfce4-commits
mailing list