Split keypad into its own widget

Review Request #1565 — Created Aug. 2, 2022 and submitted — Latest diff uploaded

Information

pidgin/pidgin
default

Reviewers

Split keypad into its own widget

Temporarily added a GtkMenuButton with a GtkPopover containing this widget to the media window, so I could check the buttons. Not sure that it totally works in the final window as I didn't start a real media session.

diff --git a/pidgin/gtkmedia.c b/pidgin/gtkmedia.c
--- a/pidgin/gtkmedia.c
+++ b/pidgin/gtkmedia.c
@@ -261,6 +261,14 @@
 }

 static void
+pidgin_media_dtmf_key_pressed_debug_cb(G_GNUC_UNUSED PidginKeypad *keypad,
+                                       gchar num,
+                                       G_GNUC_UNUSED gpointer data)
+{
+   g_message("DTMF key pressed! %c", num);
+}
+
+static void
 pidgin_media_init (PidginMedia *media)
 {
    GtkWidget *vbox;
@@ -289,6 +297,27 @@
    gtk_box_pack_start(GTK_BOX(vbox), media->priv->display, TRUE, TRUE, 6);
    gtk_widget_show(vbox);

+   {
+       GtkWidget *button = NULL;
+       GtkWidget *keypad = NULL;
+       GtkWidget *popover = NULL;
+
+       button = gtk_menu_button_new();
+       popover = gtk_popover_new(button);
+       gtk_menu_button_set_popover(GTK_MENU_BUTTON(button), popover);
+
+       keypad = pidgin_keypad_new();
+       pidgin_keypad_set_key_capture_widget(PIDGIN_KEYPAD(keypad),
+                                            GTK_WIDGET(media));
+       g_signal_connect(keypad, "pressed",
+                        G_CALLBACK(pidgin_media_dtmf_key_pressed_debug_cb),
+                        NULL);
+       gtk_container_add(GTK_CONTAINER(popover), keypad);
+
+       gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
+       gtk_widget_show(button);
+   }
+
    g_signal_connect(G_OBJECT(media), "delete-event",
            G_CALLBACK(pidgin_media_delete_event_cb), media);

Commits

Files