summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSadrul Habib Chowdhury <sadrul@pidgin.im>2007-07-13 01:42:29 +0000
committerSadrul Habib Chowdhury <sadrul@pidgin.im>2007-07-13 01:42:29 +0000
commit6f8181cf8b5578a7caa8ec4c674d6699cffbd835 (patch)
tree29373e8d97c1d841cf8efaf05db6077b7d1750e6
parentea9dcdee186d034e28b7ad65a101e27e12b5452e (diff)
downloadpidgin-6f8181cf8b5578a7caa8ec4c674d6699cffbd835.tar.gz
Add utility function to trigger some button when some key is pressed with
some other widget in focus. So now, pressing Insert in the accounts, status, pounce dialog will activate the 'Add' button, pressing Delete will activate the 'Delete' button. This can probably be used in some other places.
-rw-r--r--ChangeLog.API2
-rw-r--r--finch/gntaccount.c10
-rw-r--r--finch/gntpounce.c4
-rw-r--r--finch/gntstatus.c3
-rw-r--r--finch/libgnt/gntutils.c33
-rw-r--r--finch/libgnt/gntutils.h9
6 files changed, 59 insertions, 2 deletions
diff --git a/ChangeLog.API b/ChangeLog.API
index 6c182e4d43..b2cd1a70d1 100644
--- a/ChangeLog.API
+++ b/ChangeLog.API
@@ -107,6 +107,8 @@ version 2.1.0 (??/??/????):
* gnt_tree_set_column_resizable
* gnt_tree_set_column_is_right_aligned
* 'file-selected' signal is emited for GntFileSel
+ * gnt_style_parse_bool
+ * gnt_util_set_trigger_widget
Changed:
* gnt_tree_get_rows() now returns a GList* instead of a const
diff --git a/finch/gntaccount.c b/finch/gntaccount.c
index 34471140a3..9b79a26333 100644
--- a/finch/gntaccount.c
+++ b/finch/gntaccount.c
@@ -31,6 +31,7 @@
#include <gntlabel.h>
#include <gntline.h>
#include <gnttree.h>
+#include <gntutils.h>
#include <gntwindow.h>
#include "finch.h"
@@ -690,6 +691,7 @@ void finch_accounts_show_all()
button = gnt_button_new(_("Add"));
gnt_box_add_widget(GNT_BOX(box), button);
+ gnt_util_set_trigger_widget(GNT_WIDGET(accounts.tree), GNT_KEY_INS, button);
g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(add_account_cb), NULL);
button = gnt_button_new(_("Modify"));
@@ -698,6 +700,7 @@ void finch_accounts_show_all()
button = gnt_button_new(_("Delete"));
gnt_box_add_widget(GNT_BOX(box), button);
+ gnt_util_set_trigger_widget(GNT_WIDGET(accounts.tree), GNT_KEY_DEL, button);
g_signal_connect(G_OBJECT(button), "activate", G_CALLBACK(delete_account_cb), accounts.tree);
gnt_box_add_widget(GNT_BOX(accounts.window), box);
@@ -921,7 +924,7 @@ finch_request_authorize(PurpleAccount *account, const char *remote_user,
if (message != NULL && *message == '\0')
message = NULL;
- buffer = g_strdup_printf(_("%s%s%s%s wants to add %s to his or her buddy list%s%s"),
+ buffer = g_strdup_printf(_("%s%s%s%s wants to add %s%s%s%s to his or her buddy list%s%s"),
remote_user,
(alias != NULL ? " (" : ""),
(alias != NULL ? alias : ""),
@@ -931,7 +934,10 @@ finch_request_authorize(PurpleAccount *account, const char *remote_user,
: (purple_connection_get_display_name(gc) != NULL
? purple_connection_get_display_name(gc)
: purple_account_get_username(account))),
- (message != NULL ? ": " : "."),
+ id ? " (" : "",
+ id ? purple_account_get_username(account) : "",
+ id ? ")" : "",
+ (message != NULL ? ":\n" : "."),
(message != NULL ? message : ""));
if (!on_list) {
GntWidget *widget;
diff --git a/finch/gntpounce.c b/finch/gntpounce.c
index aa80349684..92643396b0 100644
--- a/finch/gntpounce.c
+++ b/finch/gntpounce.c
@@ -32,6 +32,8 @@
#include <gntlabel.h>
#include <gntline.h>
#include <gnttree.h>
+#include <gntutils.h>
+
#include "internal.h"
#include "finch.h"
@@ -699,6 +701,7 @@ finch_pounces_manager_show(void)
/* Add button */
button = gnt_button_new(_("Add"));
gnt_box_add_widget(GNT_BOX(bbox), button);
+ gnt_util_set_trigger_widget(tree, GNT_KEY_INS, button);
g_signal_connect(G_OBJECT(button), "activate",
G_CALLBACK(pounces_manager_add_cb), dialog);
@@ -715,6 +718,7 @@ finch_pounces_manager_show(void)
button = gnt_button_new(_("Delete"));
dialog->delete_button = button;
gnt_box_add_widget(GNT_BOX(bbox), button);
+ gnt_util_set_trigger_widget(tree, GNT_KEY_DEL, button);
g_signal_connect(G_OBJECT(button), "activate",
G_CALLBACK(pounces_manager_delete_cb), dialog);
diff --git a/finch/gntstatus.c b/finch/gntstatus.c
index a3082ff5c9..82994860dc 100644
--- a/finch/gntstatus.c
+++ b/finch/gntstatus.c
@@ -30,6 +30,7 @@
#include <gntlabel.h>
#include <gntline.h>
#include <gnttree.h>
+#include <gntutils.h>
#include "finch.h"
@@ -196,6 +197,7 @@ void finch_savedstatus_show_all()
button = gnt_button_new(_("Add"));
gnt_box_add_widget(GNT_BOX(box), button);
+ gnt_util_set_trigger_widget(tree, GNT_KEY_INS, button);
g_signal_connect_swapped(G_OBJECT(button), "activate",
G_CALLBACK(finch_savedstatus_edit), NULL);
@@ -206,6 +208,7 @@ void finch_savedstatus_show_all()
button = gnt_button_new(_("Delete"));
gnt_box_add_widget(GNT_BOX(box), button);
+ gnt_util_set_trigger_widget(tree, GNT_KEY_DEL, button);
g_signal_connect(G_OBJECT(button), "activate",
G_CALLBACK(ask_before_delete), NULL);
diff --git a/finch/libgnt/gntutils.c b/finch/libgnt/gntutils.c
index e6edb8aff3..e31ea50d8d 100644
--- a/finch/libgnt/gntutils.c
+++ b/finch/libgnt/gntutils.c
@@ -375,3 +375,36 @@ void gnt_util_parse_widgets(const char *string, int num, ...)
#endif
}
+/* Setup trigger widget */
+typedef struct {
+ char *text;
+ GntWidget *button;
+} TriggerButton;
+
+static void
+free_trigger_button(TriggerButton *b)
+{
+ g_free(b->text);
+ g_free(b);
+}
+
+static gboolean
+key_pressed(GntWidget *widget, const char *text, TriggerButton *trig)
+{
+ if (text && trig->text &&
+ strcmp(text, trig->text) == 0) {
+ gnt_widget_activate(trig->button);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void gnt_util_set_trigger_widget(GntWidget *wid, const char *text, GntWidget *button)
+{
+ TriggerButton *tb = g_new0(TriggerButton, 1);
+ tb->text = g_strdup(text);
+ tb->button = button;
+ g_signal_connect(G_OBJECT(wid), "key_pressed", G_CALLBACK(key_pressed), tb);
+ g_signal_connect_swapped(G_OBJECT(button), "destroy", G_CALLBACK(free_trigger_button), tb);
+}
+
diff --git a/finch/libgnt/gntutils.h b/finch/libgnt/gntutils.h
index e17189e4b3..b5c6f40f33 100644
--- a/finch/libgnt/gntutils.h
+++ b/finch/libgnt/gntutils.h
@@ -130,3 +130,12 @@ GntWidget * gnt_widget_bindings_view(GntWidget *widget);
*/
void gnt_util_parse_widgets(const char *string, int num, ...);
+/**
+ * Make some keypress activate a button when some key is pressed with 'wid' in focus.
+ *
+ * @param widget The widget
+ * @param key The key to trigger the button
+ * @param button The button to trigger
+ */
+void gnt_util_set_trigger_widget(GntWidget *wid, const char *text, GntWidget *button);
+