soylent r128 - trunk/src
- From: treitter svn gnome org
- To: svn-commits-list gnome org
- Subject: soylent r128 - trunk/src
- Date: Mon, 7 Apr 2008 04:12:41 +0100 (BST)
Author: treitter
Date: Mon Apr 7 04:12:40 2008
New Revision: 128
URL: http://svn.gnome.org/viewvc/soylent?rev=128&view=rev
Log:
factor out the mass-widget-signal-connection code into a generic function
Modified:
trunk/src/soylent-browser-menu-bar.c
trunk/src/soylent-browser.c
trunk/src/soylent-utils.c
trunk/src/soylent-utils.h
Modified: trunk/src/soylent-browser-menu-bar.c
==============================================================================
--- trunk/src/soylent-browser-menu-bar.c (original)
+++ trunk/src/soylent-browser-menu-bar.c Mon Apr 7 04:12:40 2008
@@ -34,7 +34,7 @@
gboolean
soylent_browser_menu_bar_setup (SoylentBrowser *browser)
{
- widget_signal_args_t signal_handlers[] =
+ const widget_signal_args_t const signal_handlers[] =
{
/* File menu */
{"imagemenuitem_new_person", "activate",
@@ -57,92 +57,18 @@
/* nothing to do here */
};
gboolean retval = FALSE;
- GladeXML *wtree = NULL;
- GtkWidget *menu_edit_edit = NULL;
- GtkWidget *menu_edit_delete = NULL;
gint signals_num = -1;
- gint i = -1;
g_return_val_if_fail (browser, retval);
/* FIXME: uncomment once SoylentBrowser is a GObject:
g_return_val_if_fail (SOYLENT_IS_BROWSER (browser), retval);
*/
-
- wtree = soylent_browser_get_widget_tree (browser);
- menu_edit_edit = glade_xml_get_widget (wtree, "imagemenuitem_edit");
- menu_edit_delete = glade_xml_get_widget (wtree, "imagemenuitem_delete");
-
signals_num = ARRAY_LEN (signal_handlers);
-
- /* invert usual logic to simplify the loop below */
- retval = TRUE;
-
- for (i = 0; i < signals_num; i++)
- {
- gboolean connect_retval = FALSE;
- widget_signal_args_t cur_args = signal_handlers[i];
- cb_entry_changed_e_contact *cb_data = NULL;
-
- switch (cur_args.cb_data_type)
- {
- case CB_DATA_SIMPLE:
- connect_retval = widget_signal_connect (wtree, cur_args.widget_name,
- cur_args.signal_name,
- cur_args.callback,
- cur_args.user_data);
- break;
- case CB_DATA_COMPLEX_FROM_E_CONTACT_FIELD:
- cb_data = g_new0 (cb_entry_changed_e_contact, 1);
- if (cb_data)
- {
- cb_data->browser = browser;
- cb_data->widget_name = cur_args.widget_name;
- cb_data->field = g_new0 (EContactField, 1);
- if (cb_data->field)
- {
- *(cb_data->field) = (EContactField) cur_args.user_data;
-
- /* FIXME - use a version which uses g_signal_connect_data so
- * we can eventually free each instance of cb_data */
- connect_retval = widget_signal_connect
- (wtree,
- cur_args.widget_name,
- cur_args.signal_name,
- cur_args.callback,
- cb_data);
- }
- }
-
- if (!connect_retval)
- {
- if (cb_data)
- {
- g_free (cb_data->field);
- g_free (cb_data);
- }
- /*
- g_free (widget_name);
- */
- }
- break;
- default:
- g_critical ("unhandled signal setup cb_data_t: %d\n",
- cur_args.cb_data_type);
- break;
-
- if (!connect_retval)
- {
- g_critical ("failed to set up signal handler for widget %s::%s\n",
- cur_args.widget_name, cur_args.signal_name);
- retval = FALSE;
- }
- }
- }
+ retval = widget_signal_connect_mass (browser, signal_handlers, signals_num);
return retval;
}
-
/* Update the menu bar's menus' items for current selection
*
* Return TRUE for success, FALSE for any failure. */
Modified: trunk/src/soylent-browser.c
==============================================================================
--- trunk/src/soylent-browser.c (original)
+++ trunk/src/soylent-browser.c Mon Apr 7 04:12:40 2008
@@ -1592,7 +1592,7 @@
{
/* XXX: this is dangerously close to being "clever", but it's better than a
* bunch of similar-but-different functions */
- widget_signal_args_t signal_handlers[] =
+ const widget_signal_args_t const signal_handlers[] =
{
/* Main app window */
{"window_main", "delete-event", soylent_browser_delete_cb, CB_DATA_SIMPLE,
@@ -1776,96 +1776,18 @@
CB_DATA_COMPLEX_FROM_E_CONTACT_FIELD, (void*) E_CONTACT_VIDEO_URL},
};
gboolean retval = FALSE;
- GladeXML *wtree = NULL;
- guint signals_num = -1;
- guint i = -1;
+ gint signals_num = -1;
g_return_val_if_fail (browser, retval);
/* FIXME: uncomment once SoylentBrowser is a GObject:
g_return_val_if_fail (SOYLENT_IS_BROWSER (browser), retval);
*/
- wtree = browser->main_window;
signals_num = ARRAY_LEN (signal_handlers);
- /* invert usual logic to simplify the loop below */
retval = TRUE;
-
- wtree = browser->main_window;
- for (i = 0; i < signals_num; i++)
- {
- gboolean connect_retval = FALSE;
- widget_signal_args_t cur_args = signal_handlers[i];
- cb_entry_changed_e_contact *cb_data = NULL;
-
- switch (cur_args.cb_data_type)
- {
- case CB_DATA_SIMPLE:
- connect_retval = widget_signal_connect (wtree, cur_args.widget_name,
- cur_args.signal_name,
- cur_args.callback,
- cur_args.user_data);
- break;
- case CB_DATA_COMPLEX_FROM_E_CONTACT_FIELD:
- cb_data = g_new0 (cb_entry_changed_e_contact, 1);
- if (cb_data)
- {
- cb_data->browser = browser;
- cb_data->widget_name = cur_args.widget_name;
- cb_data->field = g_new0 (EContactField, 1);
- if (cb_data->field)
- {
- *(cb_data->field) = (EContactField) cur_args.user_data;
-
- /* FIXME - use a version which uses g_signal_connect_data so
- * we can eventually free each instance of cb_data */
- connect_retval = widget_signal_connect
- (wtree,
- cur_args.widget_name,
- cur_args.signal_name,
- cur_args.callback,
- cb_data);
- }
- }
-
- if (!connect_retval)
- {
- if (cb_data)
- {
- g_free (cb_data->field);
- g_free (cb_data);
- }
- /*
- g_free (widget_name);
- */
- }
- break;
- default:
- g_critical ("unhandled signal setup cb_data_t: %d\n",
- cur_args.cb_data_type);
- break;
-
- if (!connect_retval)
- {
- g_critical ("failed to set up signal handler for widget %s::%s\n",
- cur_args.widget_name, cur_args.signal_name);
- retval = FALSE;
- }
- }
- }
-
- {
- gboolean mail_signals_retval = FALSE;
-
- /* TODO: push the contents of this function into the massive struct above */
- mail_signals_retval =
- soylent_browser_person_info_mail_signals_setup (browser);
-
- if (mail_signals_retval == FALSE)
- {
- retval = FALSE;
- }
- }
+ retval &= widget_signal_connect_mass (browser, signal_handlers, signals_num);
+ retval &= soylent_browser_person_info_mail_signals_setup (browser);
return retval;
}
Modified: trunk/src/soylent-utils.c
==============================================================================
--- trunk/src/soylent-utils.c (original)
+++ trunk/src/soylent-utils.c Mon Apr 7 04:12:40 2008
@@ -77,6 +77,87 @@
return retval;
}
+gboolean
+widget_signal_connect_mass (SoylentBrowser *browser,
+ const widget_signal_args_t const *signal_handlers,
+ guint signals_num)
+{
+ gboolean retval = FALSE;
+ GladeXML *wtree = NULL;
+ gint i = -1;
+
+ g_return_val_if_fail (browser, retval);
+ /* FIXME: uncomment once SoylentBrowser is a GObject:
+ g_return_val_if_fail (SOYLENT_IS_BROWSER (browser), retval);
+ */
+
+ wtree = soylent_browser_get_widget_tree (browser);
+
+ /* invert usual logic to simplify the loop below */
+ retval = TRUE;
+
+ for (i = 0; i < signals_num; i++)
+ {
+ gboolean connect_retval = FALSE;
+ widget_signal_args_t cur_args = signal_handlers[i];
+ cb_entry_changed_e_contact *cb_data = NULL;
+
+ switch (cur_args.cb_data_type)
+ {
+ case CB_DATA_SIMPLE:
+ connect_retval = widget_signal_connect (wtree, cur_args.widget_name,
+ cur_args.signal_name,
+ cur_args.callback,
+ cur_args.user_data);
+ break;
+ case CB_DATA_COMPLEX_FROM_E_CONTACT_FIELD:
+ cb_data = g_new0 (cb_entry_changed_e_contact, 1);
+ if (cb_data)
+ {
+ cb_data->browser = browser;
+ cb_data->widget_name = cur_args.widget_name;
+ cb_data->field = g_new0 (EContactField, 1);
+ if (cb_data->field)
+ {
+ *(cb_data->field) = (EContactField) cur_args.user_data;
+
+ /* FIXME - use a version which uses g_signal_connect_data so
+ * we can eventually free each instance of cb_data */
+ connect_retval = widget_signal_connect
+ (wtree,
+ cur_args.widget_name,
+ cur_args.signal_name,
+ cur_args.callback,
+ cb_data);
+ }
+ }
+
+ if (!connect_retval)
+ {
+ if (cb_data)
+ {
+ g_free (cb_data->field);
+ g_free (cb_data);
+ }
+ }
+ break;
+ default:
+ g_critical ("unhandled signal setup cb_data_t: %d\n",
+ cur_args.cb_data_type);
+ break;
+
+ if (!connect_retval)
+ {
+ g_critical ("failed to set up signal handler for widget %s::%s\n",
+ cur_args.widget_name, cur_args.signal_name);
+ retval = FALSE;
+ }
+ }
+ }
+
+ return retval;
+}
+
/* Set the contents of a GtkTextBuffer without triggering its handler
* (eg, when pre-filling them with e-d-s fields for the given person) */
void
Modified: trunk/src/soylent-utils.h
==============================================================================
--- trunk/src/soylent-utils.h (original)
+++ trunk/src/soylent-utils.h Mon Apr 7 04:12:40 2008
@@ -61,6 +61,10 @@
gboolean widget_signal_connect (GladeXML *wtree, const gchar *widget_name,
const gchar *signal, gconstpointer callback,
gpointer user_data);
+gboolean widget_signal_connect_mass
+ (SoylentBrowser *browser,
+ const widget_signal_args_t const *signal_handlers,
+ guint signals_num);
void text_buffer_set_text_block_handler (GtkTextBuffer *buf, const gchar *text,
gpointer handler);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]