[gnome-screenshot/wip/exalm/cleanups: 7/16] dialog: Connect signals in xml
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-screenshot/wip/exalm/cleanups: 7/16] dialog: Connect signals in xml
- Date: Fri, 3 Apr 2020 02:14:24 +0000 (UTC)
commit d38438f50193fb3b01c588fa6417a1001b3aad33
Author: Alexander Mikhaylenko <alexm gnome org>
Date: Fri Apr 3 04:38:38 2020 +0500
dialog: Connect signals in xml
data/ui/screenshot-dialog.ui | 9 +++
src/screenshot-dialog.c | 155 +++++++++++++++++++------------------------
2 files changed, 77 insertions(+), 87 deletions(-)
---
diff --git a/data/ui/screenshot-dialog.ui b/data/ui/screenshot-dialog.ui
index 8084bd1..9f69f5a 100644
--- a/data/ui/screenshot-dialog.ui
+++ b/data/ui/screenshot-dialog.ui
@@ -4,6 +4,7 @@
<requires lib="gtk+" version="3.22"/>
<template class="ScreenshotDialog" parent="GtkApplicationWindow">
<property name="window_position">center</property>
+ <signal name="key-press-event" handler="key_press_cb"/>
<child type="titlebar">
<object class="GtkHeaderBar">
<property name="visible">True</property>
@@ -13,6 +14,7 @@
<property name="visible">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
+ <signal name="clicked" handler="back_clicked_cb"/>
</object>
</child>
<child>
@@ -23,6 +25,7 @@
<property name="has_default">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
+ <signal name="clicked" handler="save_clicked_cb"/>
<style>
<class name="suggested-action"/>
</style>
@@ -37,6 +40,7 @@
<property name="visible">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
+ <signal name="clicked" handler="copy_clicked_cb"/>
</object>
<packing>
<property name="pack_type">end</property>
@@ -59,6 +63,11 @@
<property name="width-request">256</property>
<property name="height-request">256</property>
<property name="expand">True</property>
+ <signal name="draw" handler="preview_draw_cb"/>
+ <signal name="button-press-event" handler="preview_button_press_event_cb"/>
+ <signal name="button-release-event" handler="preview_button_release_event_cb"/>
+ <signal name="drag-begin" handler="drag_begin_cb"/>
+ <signal name="drag-data-get" handler="drag_data_get_cb"/>
</object>
</child>
<child>
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;
}
-
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]