summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexander Mikhaylenko <alexm@gnome.org>2020-04-03 04:38:38 +0500
committerAlexander Mikhaylenko <alexm@gnome.org>2020-04-03 09:53:36 +0500
commit74ca5cceab670172be2a6379b61620429711894a (patch)
treee602cd84e49fcb51ca927cbcb6bb398b39fdee27 /src
parent59b9beba923ab1763efdac2fa50a076729cad7bc (diff)
downloadgnome-screenshot-74ca5cceab670172be2a6379b61620429711894a.tar.gz
dialog: Connect signals in xml
Diffstat (limited to 'src')
-rw-r--r--src/screenshot-dialog.c155
1 files changed, 68 insertions, 87 deletions
diff --git a/src/screenshot-dialog.c b/src/screenshot-dialog.c
index c3b6f0b..ef40b12 100644
--- a/src/screenshot-dialog.c
+++ b/src/screenshot-dialog.c
@@ -36,9 +36,6 @@ struct _ScreenshotDialog
GtkWidget *save_widget;
GtkWidget *filename_entry;
- GtkWidget *save_button;
- GtkWidget *copy_button;
- GtkWidget *back_button;
GtkWidget *preview_darea;
gint drag_x;
@@ -61,19 +58,18 @@ static GtkTargetEntry drag_types[] =
};
static void
-on_preview_draw (GtkWidget *drawing_area,
- cairo_t *cr,
- gpointer data)
+preview_draw_cb (GtkWidget *drawing_area,
+ cairo_t *cr,
+ ScreenshotDialog *self)
{
- ScreenshotDialog *dialog = data;
gint scale, width, height, image_width, image_height, x, y;
scale = gtk_widget_get_scale_factor (drawing_area);
width = gtk_widget_get_allocated_width (drawing_area) * scale;
height = gtk_widget_get_allocated_height (drawing_area) * scale;
- image_width = gdk_pixbuf_get_width (dialog->screenshot);
- image_height = gdk_pixbuf_get_height (dialog->screenshot);
+ image_width = gdk_pixbuf_get_width (self->screenshot);
+ image_height = gdk_pixbuf_get_height (self->screenshot);
if (image_width > width)
{
@@ -91,79 +87,75 @@ on_preview_draw (GtkWidget *drawing_area,
x = (width - image_width) / 2;
y = (height - image_height) / 2;
- if (!dialog->preview_image ||
- gdk_pixbuf_get_width (dialog->preview_image) != image_width ||
- gdk_pixbuf_get_height (dialog->preview_image) != image_height)
+ if (!self->preview_image ||
+ gdk_pixbuf_get_width (self->preview_image) != image_width ||
+ gdk_pixbuf_get_height (self->preview_image) != image_height)
{
- g_clear_object (&dialog->preview_image);
- dialog->preview_image = gdk_pixbuf_scale_simple (dialog->screenshot,
- image_width,
- image_height,
- GDK_INTERP_BILINEAR);
+ g_clear_object (&self->preview_image);
+ self->preview_image = gdk_pixbuf_scale_simple (self->screenshot,
+ image_width,
+ image_height,
+ GDK_INTERP_BILINEAR);
}
cairo_save (cr);
cairo_scale (cr, 1.0 / scale, 1.0 / scale);
- gdk_cairo_set_source_pixbuf (cr, dialog->preview_image, x, y);
+ gdk_cairo_set_source_pixbuf (cr, self->preview_image, x, y);
cairo_paint (cr);
cairo_restore (cr);
}
static gboolean
-on_preview_button_press_event (GtkWidget *drawing_area,
- GdkEventButton *event,
- gpointer data)
+preview_button_press_event_cb (GtkWidget *drawing_area,
+ GdkEventButton *event,
+ ScreenshotDialog *self)
{
- ScreenshotDialog *dialog = data;
-
- dialog->drag_x = (int) event->x;
- dialog->drag_y = (int) event->y;
+ self->drag_x = (int) event->x;
+ self->drag_y = (int) event->y;
return FALSE;
}
static gboolean
-on_preview_button_release_event (GtkWidget *drawing_area,
- GdkEventButton *event,
- gpointer data)
+preview_button_release_event_cb (GtkWidget *drawing_area,
+ GdkEventButton *event,
+ ScreenshotDialog *self)
{
- ScreenshotDialog *dialog = data;
-
- dialog->drag_x = 0;
- dialog->drag_y = 0;
+ self->drag_x = 0;
+ self->drag_y = 0;
return FALSE;
}
static void
-drag_data_get (GtkWidget *widget,
- GdkDragContext *context,
- GtkSelectionData *selection_data,
- guint info,
- guint time,
- ScreenshotDialog *dialog)
+drag_begin_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ ScreenshotDialog *self)
{
- if (info == TYPE_IMAGE_PNG)
- gtk_selection_data_set_pixbuf (selection_data, dialog->screenshot);
- else
- g_warning ("Unknown type %d", info);
+ gtk_drag_set_icon_pixbuf (context, self->preview_image,
+ self->drag_x, self->drag_y);
}
static void
-drag_begin (GtkWidget *widget,
- GdkDragContext *context,
- ScreenshotDialog *dialog)
+drag_data_get_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time,
+ ScreenshotDialog *self)
{
- gtk_drag_set_icon_pixbuf (context, dialog->preview_image,
- dialog->drag_x, dialog->drag_y);
+ if (info == TYPE_IMAGE_PNG)
+ gtk_selection_data_set_pixbuf (selection_data, self->screenshot);
+ else
+ g_warning ("Unknown type %d", info);
}
static gboolean
-dialog_key_press_cb (GtkWidget *widget,
- GdkEventKey *event,
- gpointer user_data)
+key_press_cb (GtkWidget *widget,
+ GdkEventKey *event,
+ ScreenshotDialog *self)
{
if (event->keyval == GDK_KEY_Escape)
{
@@ -175,37 +167,24 @@ dialog_key_press_cb (GtkWidget *widget,
}
static void
-button_clicked (GtkWidget *button, ScreenshotDialog *dialog)
+back_clicked_cb (GtkButton *button,
+ ScreenshotDialog *self)
{
- ScreenshotResponse res;
-
- if (button == dialog->save_button)
- res = SCREENSHOT_RESPONSE_SAVE;
- else if (button == dialog->copy_button)
- res = SCREENSHOT_RESPONSE_COPY;
- else
- res = SCREENSHOT_RESPONSE_BACK;
-
- dialog->callback (res, dialog->user_data);
+ self->callback (SCREENSHOT_RESPONSE_BACK, self->user_data);
}
static void
-setup_drawing_area (ScreenshotDialog *dialog)
+save_clicked_cb (GtkButton *button,
+ ScreenshotDialog *self)
{
- g_signal_connect (dialog->preview_darea, "draw", G_CALLBACK (on_preview_draw), dialog);
- g_signal_connect (dialog->preview_darea, "button_press_event", G_CALLBACK (on_preview_button_press_event), dialog);
- g_signal_connect (dialog->preview_darea, "button_release_event", G_CALLBACK (on_preview_button_release_event), dialog);
-
- /* setup dnd */
- gtk_drag_source_set (dialog->preview_darea,
- GDK_BUTTON1_MASK | GDK_BUTTON3_MASK,
- drag_types, G_N_ELEMENTS (drag_types),
- GDK_ACTION_COPY);
+ self->callback (SCREENSHOT_RESPONSE_SAVE, self->user_data);
+}
- g_signal_connect (G_OBJECT (dialog->preview_darea), "drag_begin",
- G_CALLBACK (drag_begin), dialog);
- g_signal_connect (G_OBJECT (dialog->preview_darea), "drag_data_get",
- G_CALLBACK (drag_data_get), dialog);
+static void
+copy_clicked_cb (GtkButton *button,
+ ScreenshotDialog *self)
+{
+ self->callback (SCREENSHOT_RESPONSE_COPY, self->user_data);
}
static void
@@ -217,10 +196,16 @@ screenshot_dialog_class_init (ScreenshotDialogClass *klass)
"/org/gnome/Screenshot/ui/screenshot-dialog.ui");
gtk_widget_class_bind_template_child (widget_class, ScreenshotDialog, filename_entry);
gtk_widget_class_bind_template_child (widget_class, ScreenshotDialog, save_widget);
- gtk_widget_class_bind_template_child (widget_class, ScreenshotDialog, save_button);
- gtk_widget_class_bind_template_child (widget_class, ScreenshotDialog, copy_button);
- gtk_widget_class_bind_template_child (widget_class, ScreenshotDialog, back_button);
gtk_widget_class_bind_template_child (widget_class, ScreenshotDialog, preview_darea);
+ gtk_widget_class_bind_template_callback (widget_class, key_press_cb);
+ gtk_widget_class_bind_template_callback (widget_class, back_clicked_cb);
+ gtk_widget_class_bind_template_callback (widget_class, save_clicked_cb);
+ gtk_widget_class_bind_template_callback (widget_class, copy_clicked_cb);
+ gtk_widget_class_bind_template_callback (widget_class, preview_draw_cb);
+ gtk_widget_class_bind_template_callback (widget_class, preview_button_press_event_cb);
+ gtk_widget_class_bind_template_callback (widget_class, preview_button_release_event_cb);
+ gtk_widget_class_bind_template_callback (widget_class, drag_begin_cb);
+ gtk_widget_class_bind_template_callback (widget_class, drag_data_get_cb);
}
static void
@@ -254,18 +239,15 @@ screenshot_dialog_new (GdkPixbuf *screenshot,
gtk_window_set_application (GTK_WINDOW (dialog), GTK_APPLICATION (g_application_get_default ()));
gtk_widget_realize (GTK_WIDGET (dialog));
- g_signal_connect (dialog, "key-press-event",
- G_CALLBACK (dialog_key_press_cb),
- NULL);
gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (dialog->save_widget), current_folder);
gtk_entry_set_text (GTK_ENTRY (dialog->filename_entry), current_name);
- g_signal_connect (dialog->save_button, "clicked", G_CALLBACK (button_clicked), dialog);
- g_signal_connect (dialog->copy_button, "clicked", G_CALLBACK (button_clicked), dialog);
- g_signal_connect (dialog->back_button, "clicked", G_CALLBACK (button_clicked), dialog);
-
- setup_drawing_area (dialog);
+ /* setup dnd */
+ gtk_drag_source_set (dialog->preview_darea,
+ GDK_BUTTON1_MASK | GDK_BUTTON3_MASK,
+ drag_types, G_N_ELEMENTS (drag_types),
+ GDK_ACTION_COPY);
gtk_widget_show_all (GTK_WIDGET (dialog));
@@ -358,4 +340,3 @@ screenshot_dialog_get_filename_entry (ScreenshotDialog *dialog)
{
return dialog->filename_entry;
}
-