summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexander Mikhaylenko <alexm@gnome.org>2020-04-03 09:46:00 +0500
committerAlexander Mikhaylenko <alexm@gnome.org>2020-04-03 09:53:36 +0500
commit45f3a638cd233d94bdfae8bed472b8e1b17d5db8 (patch)
tree0e2315d089b7c25f082d94f16632a7c796b516d3 /src
parent3cd0380d1856e665873a208acf463d8d3af391a4 (diff)
downloadgnome-screenshot-45f3a638cd233d94bdfae8bed472b8e1b17d5db8.tar.gz
dialog: Replace callback with signals
Diffstat (limited to 'src')
-rw-r--r--src/screenshot-application.c47
-rw-r--r--src/screenshot-dialog.c54
-rw-r--r--src/screenshot-dialog.h15
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);