From cc26255d60d53c56e42dffd8094d028d7cde112f Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Fri, 6 Jul 2012 15:04:55 +0200 Subject: [PATCH] dialpad-widget: use EmpathyDialpadButton This will be needed if we want to stop using GtkButton in order to keep the key pressed while the keyboard key is. Anyway, it's good to have regardeless as that makes the code cleaner. https://bugzilla.gnome.org/show_bug.cgi?id=679396 --- libempathy-gtk/empathy-dialpad-button.c | 26 +++++++++++ libempathy-gtk/empathy-dialpad-widget.c | 57 ++++++++----------------- 2 files changed, 43 insertions(+), 40 deletions(-) diff --git a/libempathy-gtk/empathy-dialpad-button.c b/libempathy-gtk/empathy-dialpad-button.c index 0378401c..bddf42bf 100644 --- a/libempathy-gtk/empathy-dialpad-button.c +++ b/libempathy-gtk/empathy-dialpad-button.c @@ -109,10 +109,36 @@ empathy_dialpad_button_constructed (GObject *object) EmpathyDialpadButton *self = EMPATHY_DIALPAD_BUTTON (object); void (*chain_up) (GObject *) = ((GObjectClass *) empathy_dialpad_button_parent_class)->constructed; + GtkWidget *vbox; + GtkWidget *label; + gchar *str; g_assert (self->priv->label != NULL); g_assert (self->priv->sub_label != NULL); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + + gtk_container_add (GTK_CONTAINER (self), vbox); + + /* main label */ + label = gtk_label_new (""); + str = g_strdup_printf ("%s", + self->priv->label); + gtk_label_set_markup (GTK_LABEL (label), str); + g_free (str); + + gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 3); + + /* sub label */ + label = gtk_label_new (""); + str = g_strdup_printf ( + "%s", + self->priv->sub_label); + gtk_label_set_markup (GTK_LABEL (label), str); + g_free (str); + + gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0); + if (chain_up != NULL) chain_up (object); } diff --git a/libempathy-gtk/empathy-dialpad-widget.c b/libempathy-gtk/empathy-dialpad-widget.c index 6361c25f..87d1d1e3 100644 --- a/libempathy-gtk/empathy-dialpad-widget.c +++ b/libempathy-gtk/empathy-dialpad-widget.c @@ -21,10 +21,10 @@ #include -#include - #include "empathy-dialpad-widget.h" +#include + G_DEFINE_TYPE (EmpathyDialpadWidget, empathy_dialpad_widget, GTK_TYPE_BOX); enum /* signals */ @@ -86,14 +86,16 @@ empathy_dialpad_widget_class_init (EmpathyDialpadWidgetClass *klass) } static gboolean -dtmf_dialpad_button_pressed_cb (GtkWidget *button, +dtmf_dialpad_button_pressed_cb (EmpathyDialpadButton *button, GdkEventButton *event, EmpathyDialpadWidget *self) { GtkEntryBuffer *buffer = gtk_entry_get_buffer (GTK_ENTRY (self->priv->entry)); - TpDTMFEvent tone = GPOINTER_TO_UINT (g_object_get_data ( - G_OBJECT (button), "dtmf-value")); - const gchar *label = g_object_get_data (G_OBJECT (button), "string-value"); + TpDTMFEvent tone; + const gchar *label; + + tone = empathy_dialpad_button_get_event (button); + label = empathy_dialpad_button_get_label (button); g_signal_emit (self, signals[START_TONE], 0, tone); @@ -104,12 +106,13 @@ dtmf_dialpad_button_pressed_cb (GtkWidget *button, } static gboolean -dtmf_dialpad_button_released_cb (GtkWidget *button, +dtmf_dialpad_button_released_cb (EmpathyDialpadButton *button, GdkEventButton *event, EmpathyDialpadWidget *self) { - TpDTMFEvent tone = GPOINTER_TO_UINT (g_object_get_data ( - G_OBJECT (button), "dtmf-value")); + TpDTMFEvent tone; + + tone = empathy_dialpad_button_get_event (button); g_signal_emit (self, signals[STOP_TONE], 0, tone); @@ -160,40 +163,14 @@ empathy_dialpad_widget_init (EmpathyDialpadWidget *self) for (i = 0; dtmfbuttons[i].label != NULL; i++) { - GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); - GtkWidget *button = gtk_button_new (); - GtkWidget *label; - gchar *str; - - gtk_container_add (GTK_CONTAINER (button), vbox); + GtkWidget *button; - /* main label */ - label = gtk_label_new (""); - str = g_strdup_printf ("%s", - dtmfbuttons[i].label); - gtk_label_set_markup (GTK_LABEL (label), str); - g_free (str); - - gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 3); - - /* sub label */ - label = gtk_label_new (""); - str = g_strdup_printf ( - "%s", - dtmfbuttons[i].sublabel); - gtk_label_set_markup (GTK_LABEL (label), str); - g_free (str); - - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0); + button = empathy_dialpad_button_new (dtmfbuttons[i].label, + dtmfbuttons[i].sublabel, dtmfbuttons[i].event); gtk_grid_attach (GTK_GRID (grid), button, i % 3, i / 3, 1, 1); - g_object_set_data (G_OBJECT (button), "dtmf-value", - GUINT_TO_POINTER (dtmfbuttons[i].event)); - g_object_set_data (G_OBJECT (button), "string-value", - (gpointer) dtmfbuttons[i].label); - g_signal_connect (G_OBJECT (button), "button-press-event", G_CALLBACK (dtmf_dialpad_button_pressed_cb), self); g_signal_connect (G_OBJECT (button), "button-release-event", @@ -220,7 +197,7 @@ void empathy_dialpad_widget_press_key (EmpathyDialpadWidget *self, gchar key) { - GtkWidget *button; + EmpathyDialpadButton *button; button = g_hash_table_lookup (self->priv->buttons, GUINT_TO_POINTER (key)); @@ -230,6 +207,6 @@ empathy_dialpad_widget_press_key (EmpathyDialpadWidget *self, /* gtk_widget_activate() just does the button-pressed animation, it doesn't * fire the callbacks so we do it manually. */ dtmf_dialpad_button_pressed_cb (button, NULL, self); - gtk_widget_activate (button); + gtk_widget_activate (GTK_WIDGET (button)); dtmf_dialpad_button_released_cb (button, NULL, self); } -- 2.39.2