diff options
author | Alexander Mikhaylenko <alexm@gnome.org> | 2020-04-03 09:46:00 +0500 |
---|---|---|
committer | Alexander Mikhaylenko <alexm@gnome.org> | 2020-04-03 09:53:36 +0500 |
commit | 45f3a638cd233d94bdfae8bed472b8e1b17d5db8 (patch) | |
tree | 0e2315d089b7c25f082d94f16632a7c796b516d3 /src | |
parent | 3cd0380d1856e665873a208acf463d8d3af391a4 (diff) | |
download | gnome-screenshot-45f3a638cd233d94bdfae8bed472b8e1b17d5db8.tar.gz |
dialog: Replace callback with signals
Diffstat (limited to 'src')
-rw-r--r-- | src/screenshot-application.c | 47 | ||||
-rw-r--r-- | src/screenshot-dialog.c | 54 | ||||
-rw-r--r-- | src/screenshot-dialog.h | 15 |
3 files changed, 68 insertions, 48 deletions
diff --git a/src/screenshot-application.c b/src/screenshot-application.c index fd3811b..820bc55 100644 --- a/src/screenshot-application.c +++ b/src/screenshot-application.c @@ -371,27 +371,27 @@ screenshot_save_to_clipboard (ScreenshotApplication *self) } static void -screenshot_dialog_response_cb (ScreenshotResponse response, - ScreenshotApplication *self) +save_clicked_cb (ScreenshotDialog *dialog, + ScreenshotApplication *self) { - switch (response) - { - case SCREENSHOT_RESPONSE_SAVE: - /* update to the new URI */ - g_free (self->priv->save_uri); - self->priv->save_uri = screenshot_dialog_get_uri (self->priv->dialog); - screenshot_save_to_file (self); - break; - case SCREENSHOT_RESPONSE_COPY: - screenshot_save_to_clipboard (self); - break; - case SCREENSHOT_RESPONSE_BACK: - screenshot_back (self); - break; - default: - g_assert_not_reached (); - break; - } + /* update to the new URI */ + g_free (self->priv->save_uri); + self->priv->save_uri = screenshot_dialog_get_uri (self->priv->dialog); + screenshot_save_to_file (self); +} + +static void +copy_clicked_cb (ScreenshotDialog *dialog, + ScreenshotApplication *self) +{ + screenshot_save_to_clipboard (self); +} + +static void +back_clicked_cb (ScreenshotDialog *dialog, + ScreenshotApplication *self) +{ + screenshot_back (self); } static void @@ -440,9 +440,10 @@ build_filename_ready_cb (GObject *source, if (screenshot_config->interactive) { self->priv->dialog = screenshot_dialog_new (self->priv->screenshot, - self->priv->save_uri, - (SaveScreenshotCallback)screenshot_dialog_response_cb, - self); + self->priv->save_uri); + g_signal_connect_object (self->priv->dialog, "save", G_CALLBACK (save_clicked_cb), self, 0); + g_signal_connect_object (self->priv->dialog, "copy", G_CALLBACK (copy_clicked_cb), self, 0); + g_signal_connect_object (self->priv->dialog, "back", G_CALLBACK (back_clicked_cb), self, 0); } else { diff --git a/src/screenshot-dialog.c b/src/screenshot-dialog.c index f72fdf6..684152e 100644 --- a/src/screenshot-dialog.c +++ b/src/screenshot-dialog.c @@ -40,14 +40,20 @@ struct _ScreenshotDialog gint drag_x; gint drag_y; - - SaveScreenshotCallback callback; - gpointer user_data; }; G_DEFINE_TYPE (ScreenshotDialog, screenshot_dialog, GTK_TYPE_APPLICATION_WINDOW) enum { + SIGNAL_SAVE, + SIGNAL_COPY, + SIGNAL_BACK, + N_SIGNALS, +}; + +static guint signals[N_SIGNALS]; + +enum { TYPE_IMAGE_PNG, LAST_TYPE }; @@ -170,21 +176,21 @@ static void back_clicked_cb (GtkButton *button, ScreenshotDialog *self) { - self->callback (SCREENSHOT_RESPONSE_BACK, self->user_data); + g_signal_emit (self, signals[SIGNAL_BACK], 0); } static void save_clicked_cb (GtkButton *button, ScreenshotDialog *self) { - self->callback (SCREENSHOT_RESPONSE_SAVE, self->user_data); + g_signal_emit (self, signals[SIGNAL_SAVE], 0); } static void copy_clicked_cb (GtkButton *button, ScreenshotDialog *self) { - self->callback (SCREENSHOT_RESPONSE_COPY, self->user_data); + g_signal_emit (self, signals[SIGNAL_COPY], 0); } static void @@ -192,6 +198,33 @@ screenshot_dialog_class_init (ScreenshotDialogClass *klass) { GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + signals[SIGNAL_SAVE] = + g_signal_new ("save", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, NULL, + G_TYPE_NONE, + 0); + + signals[SIGNAL_COPY] = + g_signal_new ("copy", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, NULL, + G_TYPE_NONE, + 0); + + signals[SIGNAL_BACK] = + g_signal_new ("back", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, NULL, + G_TYPE_NONE, + 0); + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Screenshot/ui/screenshot-dialog.ui"); gtk_widget_class_bind_template_child (widget_class, ScreenshotDialog, filename_entry); @@ -215,10 +248,8 @@ screenshot_dialog_init (ScreenshotDialog *self) } ScreenshotDialog * -screenshot_dialog_new (GdkPixbuf *screenshot, - char *initial_uri, - SaveScreenshotCallback f, - gpointer user_data) +screenshot_dialog_new (GdkPixbuf *screenshot, + char *initial_uri) { g_autoptr(GFile) tmp_file = NULL, parent_file = NULL; g_autofree gchar *current_folder = NULL, *current_name = NULL; @@ -233,9 +264,8 @@ screenshot_dialog_new (GdkPixbuf *screenshot, current_folder = g_file_get_uri (parent_file); self = g_object_new (SCREENSHOT_TYPE_DIALOG, NULL); + self->screenshot = screenshot; - self->callback = f; - self->user_data = user_data; gtk_window_set_application (GTK_WINDOW (self), GTK_APPLICATION (g_application_get_default ())); gtk_widget_realize (GTK_WIDGET (self)); diff --git a/src/screenshot-dialog.h b/src/screenshot-dialog.h index a929ac4..51b425f 100644 --- a/src/screenshot-dialog.h +++ b/src/screenshot-dialog.h @@ -27,19 +27,8 @@ G_BEGIN_DECLS G_DECLARE_FINAL_TYPE (ScreenshotDialog, screenshot_dialog, SCREENSHOT, DIALOG, GtkApplicationWindow) -typedef enum { - SCREENSHOT_RESPONSE_SAVE, - SCREENSHOT_RESPONSE_COPY, - SCREENSHOT_RESPONSE_BACK - -} ScreenshotResponse; - -typedef void (*SaveScreenshotCallback) (ScreenshotResponse response, gpointer *user_data); - -ScreenshotDialog *screenshot_dialog_new (GdkPixbuf *screenshot, - char *initial_uri, - SaveScreenshotCallback f, - gpointer user_data); +ScreenshotDialog *screenshot_dialog_new (GdkPixbuf *screenshot, + char *initial_uri); char *screenshot_dialog_get_uri (ScreenshotDialog *dialog); char *screenshot_dialog_get_folder (ScreenshotDialog *dialog); |