[Gnucash-changes] r12241 - gnucash/trunk - Use the component
manager to ensure there is only one totd dialog at a
David Hampton
hampton at cvs.gnucash.org
Mon Jan 2 23:02:43 EST 2006
Author: hampton
Date: 2006-01-02 23:02:42 -0500 (Mon, 02 Jan 2006)
New Revision: 12241
Trac: http://svn.gnucash.org/trac/changeset/12241
Modified:
gnucash/trunk/ChangeLog
gnucash/trunk/src/gnome/dialog-totd.c
gnucash/trunk/src/gnome/glade/totd.glade
Log:
Use the component manager to ensure there is only one totd dialog at a
time. Don't mark the dialog as transient (or type GTK_WINDOW_DIALOG)
so that window managers won't make it float above all other GnuCash
windows.
Modified: gnucash/trunk/ChangeLog
===================================================================
--- gnucash/trunk/ChangeLog 2006-01-03 02:44:45 UTC (rev 12240)
+++ gnucash/trunk/ChangeLog 2006-01-03 04:02:42 UTC (rev 12241)
@@ -1,5 +1,10 @@
2006-01-02 David Hampton <hampton at employees.org>
+ * src/gnome/dialog-totd.c: Use the component manager to ensure
+ there is only one totd dialog at a time. Don't mark the dialog as
+ transient (or type GTK_WINDOW_DIALOG) so that window managers
+ won't make it float above all other GnuCash windows.
+
* src/engine/Transaction.c: Fix test inverted by commit 12231.
* src/gnome-utils/Makefile.am
Modified: gnucash/trunk/src/gnome/dialog-totd.c
===================================================================
--- gnucash/trunk/src/gnome/dialog-totd.c 2006-01-03 02:44:45 UTC (rev 12240)
+++ gnucash/trunk/src/gnome/dialog-totd.c 2006-01-03 04:02:42 UTC (rev 12241)
@@ -1,7 +1,7 @@
/*
* dialog-totd.c : dialog to display a "tip of the day"
*
- * Copyright (c) 2005 David Hampton <hampton at employees.org>
+ * Copyright (c) 2005,2006 David Hampton <hampton at employees.org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -29,6 +29,7 @@
#include "dialog-totd.h"
#include "dialog-utils.h"
+#include "gnc-component-manager.h"
#include "gnc-gconf-utils.h"
#include "gnc-gnome-utils.h"
#include "gnc-engine.h"
@@ -37,12 +38,13 @@
#define GCONF_SECTION "dialogs/tip_of_the_day"
#define KEY_CURRENT_TIP "current_tip"
#define KEY_SHOW_TIPS "show_at_startup"
+#define DIALOG_TOTD_CM_CLASS "dialog-totd"
+#define GNC_RESPONSE_FORWARD 1
+#define GNC_RESPONSE_BACK 2
/* Callbacks */
-void gnc_totd_dialog_close(GtkButton *button, gpointer user_data);
-void gnc_totd_dialog_next(GtkButton *button, gpointer user_data);
-void gnc_totd_dialog_previous(GtkButton *button, gpointer user_data);
+void gnc_totd_dialog_response (GtkDialog *dialog, gint reponse, gpointer user_data);
void gnc_totd_dialog_startup_toggled (GtkToggleButton *button, gpointer user_data);
/* The Tips */
@@ -98,34 +100,30 @@
/* Callbacks */
/********************/
-void
-gnc_totd_dialog_close (GtkButton *button,
- gpointer user_data)
+void gnc_totd_dialog_response (GtkDialog *dialog,
+ gint response,
+ gpointer user_data)
{
- GtkWidget *dialog;
+ ENTER("dialog %p, response %d, user_data %p", dialog, response, user_data);
+ switch (response) {
+ case GNC_RESPONSE_FORWARD:
+ gnc_new_tip_number(GTK_WIDGET(dialog), 1);
+ break;
- ENTER("button %p, dialog %p", button, user_data);
- dialog = GTK_WIDGET(user_data);
- gnc_save_window_size(GCONF_SECTION, GTK_WINDOW(dialog));
- gtk_widget_destroy(dialog);
+ case GNC_RESPONSE_BACK:
+ gnc_new_tip_number(GTK_WIDGET(dialog), -1);
+ break;
+
+ default:
+ gnc_save_window_size(GCONF_SECTION, GTK_WINDOW(dialog));
+ gnc_unregister_gui_component_by_data(DIALOG_TOTD_CM_CLASS, dialog);
+ gtk_widget_destroy(GTK_WIDGET(dialog));
+ break;
+ }
LEAVE("");
}
void
-gnc_totd_dialog_next (GtkButton *button,
- gpointer user_data)
-{
- gnc_new_tip_number(GTK_WIDGET(button), 1);
-}
-
-void
-gnc_totd_dialog_previous (GtkButton *button,
- gpointer user_data)
-{
- gnc_new_tip_number(GTK_WIDGET(button), -1);
-}
-
-void
gnc_totd_dialog_startup_toggled (GtkToggleButton *button,
gpointer user_data)
{
@@ -165,7 +163,6 @@
/* Convert any escaped characters while counting the strings */
for (tip_count = 0; tip_list[tip_count] != NULL; tip_count++) {
-// new = g_strdelimit(string, "\n", ' ');
new = g_strcompress(g_strdelimit(tip_list[tip_count], "\n", ' '));
g_free(tip_list[tip_count]);
tip_list[tip_count] = new;
@@ -176,6 +173,52 @@
return TRUE;
}
+/** Raise the totd dialog to the top of the window stack. This
+ * function is called if the user attempts to create a second totd
+ * dialog.
+ *
+ * @internal
+ *
+ * @param class Unused.
+ *
+ * @param component_id Unused.
+ *
+ * @param user_data A pointer to the totd dialog.
+ *
+ * @param iter_data Unused.
+ */
+static gboolean
+show_handler (const char *class, gint component_id,
+ gpointer user_data, gpointer iter_data)
+{
+ GtkWidget *dialog;
+
+ ENTER(" ");
+ dialog = GTK_WIDGET(user_data);
+ gtk_window_present(GTK_WINDOW(dialog));
+ LEAVE(" ");
+ return(TRUE);
+}
+
+/** Close the totd dialog.
+ *
+ * @internal
+ *
+ * @param user_data A pointer to the totd dialog.
+ */
+static void
+close_handler (gpointer user_data)
+{
+ GtkWidget *dialog;
+
+ ENTER(" ");
+ dialog = GTK_WIDGET(user_data);
+ gnc_unregister_gui_component_by_data(DIALOG_TOTD_CM_CLASS, dialog);
+ gtk_widget_destroy(dialog);
+ LEAVE(" ");
+}
+
+
/********************/
/* Main */
/********************/
@@ -197,9 +240,12 @@
current_tip_number = gnc_gconf_get_int(GCONF_SECTION, KEY_CURRENT_TIP, NULL);
}
+ if (gnc_forall_gui_components(DIALOG_TOTD_CM_CLASS, show_handler, NULL)) {
+ return;
+ }
+
xml = gnc_glade_xml_new ("totd.glade", "totd_dialog");
dialog = glade_xml_get_widget (xml, "totd_dialog");
- gtk_window_set_transient_for(GTK_WINDOW (dialog), parent);
glade_xml_signal_autoconnect_full(xml, gnc_glade_autoconnect_full_func,
dialog);
@@ -210,4 +256,7 @@
gnc_restore_window_size(GCONF_SECTION, GTK_WINDOW(dialog));
gtk_widget_show(GTK_WIDGET (dialog));
+
+ gnc_register_gui_component(DIALOG_TOTD_CM_CLASS,
+ NULL, close_handler, dialog);
}
Modified: gnucash/trunk/src/gnome/glade/totd.glade
===================================================================
--- gnucash/trunk/src/gnome/glade/totd.glade 2006-01-03 02:44:45 UTC (rev 12240)
+++ gnucash/trunk/src/gnome/glade/totd.glade 2006-01-03 04:02:42 UTC (rev 12241)
@@ -17,9 +17,10 @@
<property name="decorated">True</property>
<property name="skip_taskbar_hint">False</property>
<property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<property name="has_separator">True</property>
+ <signal name="response" handler="gnc_totd_dialog_response" last_modification_time="Tue, 03 Jan 2006 03:47:09 GMT"/>
<child internal-child="vbox">
<widget class="GtkVBox" id="dialog-vbox1">
@@ -42,7 +43,6 @@
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="response_id">2</property>
- <signal name="clicked" handler="gnc_totd_dialog_previous" last_modification_time="Tue, 26 Apr 2005 03:10:09 GMT"/>
</widget>
</child>
@@ -56,7 +56,6 @@
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="response_id">1</property>
- <signal name="clicked" handler="gnc_totd_dialog_next" last_modification_time="Tue, 26 Apr 2005 03:10:17 GMT"/>
</widget>
</child>
@@ -70,7 +69,6 @@
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="response_id">-7</property>
- <signal name="clicked" handler="gnc_totd_dialog_close" last_modification_time="Tue, 26 Apr 2005 05:36:09 GMT"/>
</widget>
</child>
</widget>
@@ -125,7 +123,7 @@
<child>
<widget class="GtkLabel" id="label4">
<property name="visible">True</property>
- <property name="label" translatable="no"> </property>
+ <property name="label"> </property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
More information about the gnucash-changes
mailing list