[gthumb] added option to change the mouse wheel action
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] added option to change the mouse wheel action
- Date: Sun, 24 Nov 2019 12:33:33 +0000 (UTC)
commit 3b95e2a6286a2d2cc5304a5fe7e37d8e6c98da3b
Author: Paolo Bacchilega <paobac src gnome org>
Date: Sat Nov 16 17:37:11 2019 +0100
added option to change the mouse wheel action
data/gschemas/org.gnome.gthumb.gschema.xml | 3 +
.../data/ui/image-viewer-preferences.ui | 82 +++++++++++++++++++++-
extensions/image_viewer/gth-image-viewer-page.c | 10 +++
extensions/image_viewer/preferences.c | 25 +++++++
gthumb/gth-browser.c | 41 +++++++++--
gthumb/gth-browser.h | 6 ++
gthumb/gth-image-viewer.c | 51 ++++++++------
gthumb/gth-image-viewer.h | 2 +
gthumb/gth-preferences.h | 1 +
gthumb/gth-viewer-page.c | 11 +++
gthumb/gth-viewer-page.h | 5 ++
gthumb/typedefs.h | 6 ++
12 files changed, 215 insertions(+), 28 deletions(-)
---
diff --git a/data/gschemas/org.gnome.gthumb.gschema.xml b/data/gschemas/org.gnome.gthumb.gschema.xml
index 1db7334b..22aeb391 100644
--- a/data/gschemas/org.gnome.gthumb.gschema.xml
+++ b/data/gschemas/org.gnome.gthumb.gschema.xml
@@ -138,6 +138,9 @@
<key name="fullscreen-thumbnails-visible" type="b">
<default>false</default>
</key>
+ <key name="scroll-action" enum="org.gnome.gthumb.GthScrollAction">
+ <default>'change-file'</default>
+ </key>
</schema>
<schema id="org.gnome.gthumb.dialogs" path="/org/gnome/gthumb/dialogs/">
diff --git a/extensions/image_viewer/data/ui/image-viewer-preferences.ui
b/extensions/image_viewer/data/ui/image-viewer-preferences.ui
index 66cd1ff5..89e4f07b 100644
--- a/extensions/image_viewer/data/ui/image-viewer-preferences.ui
+++ b/extensions/image_viewer/data/ui/image-viewer-preferences.ui
@@ -102,6 +102,84 @@
<property name="position">0</property>
</packing>
</child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Mouse wheel:</property>
+ <property name="use_markup">True</property>
+ <property name="xalign">0</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box8">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">12</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkRadioButton" id="scroll_event_change_image_radiobutton">
+ <property name="label" translatable="yes" context="zoom quality">Change image</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">start</property>
+ <property name="use_underline">True</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="scroll_event_zoom_radiobutton">
+ <property name="label" translatable="yes" context="zoom quality">Zoom</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="halign">start</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">scroll_event_change_image_radiobutton</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
<child>
<object class="GtkBox" id="box4">
<property name="visible">True</property>
@@ -184,7 +262,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
<child>
@@ -262,7 +340,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">2</property>
+ <property name="position">3</property>
</packing>
</child>
</object>
diff --git a/extensions/image_viewer/gth-image-viewer-page.c b/extensions/image_viewer/gth-image-viewer-page.c
index 080f3480..c8efc3e3 100644
--- a/extensions/image_viewer/gth-image-viewer-page.c
+++ b/extensions/image_viewer/gth-image-viewer-page.c
@@ -1938,6 +1938,15 @@ gth_image_viewer_page_real_update_info (GthViewerPage *base,
}
+static gboolean
+gth_image_viewer_page_real_zoom_from_scroll (GthViewerPage *base,
+ GdkEventScroll *event)
+{
+ GthImageViewerPage *self = GTH_IMAGE_VIEWER_PAGE (base);
+ return gth_image_viewer_zoom_from_scroll (GTH_IMAGE_VIEWER (self->priv->viewer), event);
+}
+
+
static void
gth_image_viewer_page_real_show_properties (GthViewerPage *base,
gboolean show)
@@ -2014,6 +2023,7 @@ gth_viewer_page_interface_init (GthViewerPageInterface *iface)
iface->save_as = gth_image_viewer_page_real_save_as;
iface->revert = gth_image_viewer_page_real_revert;
iface->update_info = gth_image_viewer_page_real_update_info;
+ iface->zoom_from_scroll = gth_image_viewer_page_real_zoom_from_scroll;
iface->show_properties = gth_image_viewer_page_real_show_properties;
}
diff --git a/extensions/image_viewer/preferences.c b/extensions/image_viewer/preferences.c
index b499c3c6..3bc6f2ad 100644
--- a/extensions/image_viewer/preferences.c
+++ b/extensions/image_viewer/preferences.c
@@ -31,6 +31,7 @@
typedef struct {
GtkBuilder *builder;
GSettings *settings;
+ GSettings *browser_settings;
} BrowserData;
@@ -39,6 +40,7 @@ browser_data_free (BrowserData *data)
{
g_object_unref (data->builder);
g_object_unref (data->settings);
+ g_object_unref (data->browser_settings);
g_free (data);
}
@@ -59,6 +61,15 @@ reset_scrollbars_toggled_cb (GtkToggleButton *button,
}
+static void
+scroll_event_toggled_cb (GtkToggleButton *button,
+ BrowserData *data)
+{
+ g_settings_set_enum (data->browser_settings,
+ PREF_VIEWER_SCROLL_ACTION,
+ (GTK_WIDGET (button) == GET_WIDGET ("scroll_event_change_image_radiobutton")) ?
GTH_SCROLL_ACTION_CHANGE_FILE : GTH_SCROLL_ACTION_ZOOM);
+}
+
static void
zoom_quality_radiobutton_toggled_cb (GtkToggleButton *button,
BrowserData *data)
@@ -90,6 +101,7 @@ image_viewer__dlg_preferences_construct_cb (GtkWidget *dialog,
data = g_new0 (BrowserData, 1);
data->builder = _gtk_builder_new_from_file ("image-viewer-preferences.ui", "image_viewer");
data->settings = g_settings_new (GTHUMB_IMAGE_VIEWER_SCHEMA);
+ data->browser_settings = g_settings_new (GTHUMB_BROWSER_SCHEMA);
notebook = _gtk_builder_get_widget (dialog_builder, "notebook");
@@ -107,6 +119,11 @@ image_viewer__dlg_preferences_construct_cb (GtkWidget *dialog,
else
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET
("zoom_quality_high_radiobutton")), TRUE);
+ if (g_settings_get_enum (data->browser_settings, PREF_VIEWER_SCROLL_ACTION) ==
GTH_SCROLL_ACTION_CHANGE_FILE)
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET
("scroll_event_change_image_radiobutton")), TRUE);
+ else
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET
("scroll_event_zoom_radiobutton")), TRUE);
+
gtk_combo_box_set_active (GTK_COMBO_BOX (GET_WIDGET ("transparency_style_combobox")),
g_settings_get_enum (data->settings, PREF_IMAGE_VIEWER_TRANSPARENCY_STYLE));
@@ -114,6 +131,14 @@ image_viewer__dlg_preferences_construct_cb (GtkWidget *dialog,
"changed",
G_CALLBACK (zoom_change_changed_cb),
data);
+ g_signal_connect (GET_WIDGET ("scroll_event_change_image_radiobutton"),
+ "toggled",
+ G_CALLBACK (scroll_event_toggled_cb),
+ data);
+ g_signal_connect (GET_WIDGET ("scroll_event_zoom_radiobutton"),
+ "toggled",
+ G_CALLBACK (scroll_event_toggled_cb),
+ data);
g_signal_connect (GET_WIDGET ("zoom_quality_low_radiobutton"),
"toggled",
G_CALLBACK (zoom_quality_radiobutton_toggled_cb),
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index 57a5b55f..e8a04ce7 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -183,6 +183,7 @@ struct _GthBrowserPrivate {
guint folder_tree_open_folder_id;
GtkWidget *apply_editor_changes_button;
gboolean ask_to_save_modified_images;
+ GthScrollAction scroll_action;
/* settings */
@@ -4086,6 +4087,16 @@ pref_msg_save_modified_image_changed (GSettings *settings,
}
+static void
+pref_scroll_action_changed (GSettings *settings,
+ const char *key,
+ gpointer user_data)
+{
+ GthBrowser *browser = user_data;
+ browser->priv->scroll_action = g_settings_get_enum (settings, key);
+}
+
+
static gboolean
_gth_browser_realize (GtkWidget *browser,
gpointer *data)
@@ -4904,6 +4915,7 @@ gth_browser_init (GthBrowser *browser)
browser->priv->viewer_sidebar = g_settings_get_enum (browser->priv->browser_settings,
PREF_BROWSER_VIEWER_SIDEBAR);
browser->priv->fast_file_type = g_settings_get_boolean (browser->priv->browser_settings,
PREF_BROWSER_FAST_FILE_TYPE);
browser->priv->ask_to_save_modified_images = g_settings_get_boolean
(browser->priv->messages_settings, PREF_MSG_SAVE_MODIFIED_IMAGE);
+ browser->priv->scroll_action = g_settings_get_enum (browser->priv->browser_settings,
PREF_VIEWER_SCROLL_ACTION);
/* load the history only for the first window */
{
@@ -4972,6 +4984,10 @@ gth_browser_init (GthBrowser *browser)
"changed::" PREF_MSG_SAVE_MODIFIED_IMAGE,
G_CALLBACK (pref_msg_save_modified_image_changed),
browser);
+ g_signal_connect (browser->priv->browser_settings,
+ "changed::" PREF_VIEWER_SCROLL_ACTION,
+ G_CALLBACK (pref_scroll_action_changed),
+ browser);
browser->priv->constructed = TRUE;
}
@@ -5612,6 +5628,8 @@ gboolean
gth_browser_viewer_scroll_event_cb (GthBrowser *browser,
GdkEventScroll *event)
{
+ gboolean handled;
+
g_return_val_if_fail (event != NULL, FALSE);
if (! _gth_browser_can_change_image (browser))
@@ -5626,12 +5644,25 @@ gth_browser_viewer_scroll_event_cb (GthBrowser *browser,
if ((event->direction != GDK_SCROLL_UP) && (event->direction != GDK_SCROLL_DOWN))
return FALSE;
- if (event->direction == GDK_SCROLL_UP)
- gth_browser_show_prev_image (browser, FALSE, FALSE);
- else
- gth_browser_show_next_image (browser, FALSE, FALSE);
+ handled = FALSE;
+ switch (browser->priv->scroll_action) {
+ case GTH_SCROLL_ACTION_CHANGE_FILE:
+ if (event->direction == GDK_SCROLL_UP)
+ gth_browser_show_prev_image (browser, FALSE, FALSE);
+ else
+ gth_browser_show_next_image (browser, FALSE, FALSE);
+ handled = TRUE;
+ break;
- return TRUE;
+ case GTH_SCROLL_ACTION_ZOOM:
+ handled = gth_viewer_page_zoom_from_scroll (browser->priv->viewer_page, event);
+ break;
+
+ default:
+ break;
+ }
+
+ return handled;
}
diff --git a/gthumb/gth-browser.h b/gthumb/gth-browser.h
index 611b5942..17890e20 100644
--- a/gthumb/gth-browser.h
+++ b/gthumb/gth-browser.h
@@ -111,6 +111,12 @@ typedef enum {
GTH_ACTION_TREE_OPEN
} GthAction;
+typedef enum {
+ GTH_SCROLL_ACTION_NONE,
+ GTH_SCROLL_ACTION_CHANGE_FILE,
+ GTH_SCROLL_ACTION_ZOOM
+} GthScrollAction;
+
struct _GthBrowser
{
GthWindow __parent;
diff --git a/gthumb/gth-image-viewer.c b/gthumb/gth-image-viewer.c
index f3e7fb43..f19044f2 100644
--- a/gthumb/gth-image-viewer.c
+++ b/gthumb/gth-image-viewer.c
@@ -972,27 +972,8 @@ gth_image_viewer_scroll_event (GtkWidget *widget,
/* Control + Scroll-Up / Control + Scroll-Down ==> Zoom In / Zoom Out */
if (event->state & GDK_CONTROL_MASK) {
- if (self->priv->zoom_enabled) {
- double new_zoom_level;
-
- switch (event->direction) {
- case GDK_SCROLL_UP:
- case GDK_SCROLL_DOWN:
- if (event->direction == GDK_SCROLL_UP)
- new_zoom_level = get_next_zoom (self->priv->zoom_level);
- else
- new_zoom_level = get_prev_zoom (self->priv->zoom_level);
- set_zoom_centered_at (self, new_zoom_level, FALSE, (int) event->x, (int)
event->y);
- gtk_widget_queue_resize (GTK_WIDGET (self));
- retval = TRUE;
- break;
-
- default:
- break;
- }
- }
-
- return retval;
+ if (self->priv->zoom_enabled && gth_image_viewer_zoom_from_scroll (self, event))
+ return TRUE;
}
/* Scroll Left / Scroll Right ==> Scroll the image horizontally */
@@ -2206,6 +2187,34 @@ gth_image_viewer_zoom_out (GthImageViewer *self)
}
+gboolean
+gth_image_viewer_zoom_from_scroll (GthImageViewer *self,
+ GdkEventScroll *event)
+{
+ gboolean handled;
+ double new_zoom_level;
+
+ handled = FALSE;
+ switch (event->direction) {
+ case GDK_SCROLL_UP:
+ case GDK_SCROLL_DOWN:
+ if (event->direction == GDK_SCROLL_UP)
+ new_zoom_level = get_next_zoom (self->priv->zoom_level);
+ else
+ new_zoom_level = get_prev_zoom (self->priv->zoom_level);
+ set_zoom_centered_at (self, new_zoom_level, FALSE, (int) event->x, (int) event->y);
+ gtk_widget_queue_resize (GTK_WIDGET (self));
+ handled = TRUE;
+ break;
+
+ default:
+ break;
+ }
+
+ return handled;
+}
+
+
void
gth_image_viewer_set_fit_mode (GthImageViewer *self,
GthFit fit_mode)
diff --git a/gthumb/gth-image-viewer.h b/gthumb/gth-image-viewer.h
index dd62ddd4..4de2b6d1 100644
--- a/gthumb/gth-image-viewer.h
+++ b/gthumb/gth-image-viewer.h
@@ -216,6 +216,8 @@ void gth_image_viewer_set_zoom_change (GthImageViewer
GthZoomChange gth_image_viewer_get_zoom_change (GthImageViewer *viewer);
void gth_image_viewer_zoom_in (GthImageViewer *viewer);
void gth_image_viewer_zoom_out (GthImageViewer *viewer);
+gboolean gth_image_viewer_zoom_from_scroll (GthImageViewer *viewer,
+ GdkEventScroll *event);
void gth_image_viewer_set_fit_mode (GthImageViewer *viewer,
GthFit fit_mode);
GthFit gth_image_viewer_get_fit_mode (GthImageViewer *viewer);
diff --git a/gthumb/gth-preferences.h b/gthumb/gth-preferences.h
index ec7ae859..9c3d4f09 100644
--- a/gthumb/gth-preferences.h
+++ b/gthumb/gth-preferences.h
@@ -80,6 +80,7 @@ G_BEGIN_DECLS
#define PREF_BROWSER_REUSE_ACTIVE_WINDOW "reuse-active-window"
#define PREF_FULLSCREEN_THUMBNAILS_VISIBLE "fullscreen-thumbnails-visible"
#define PREF_FULLSCREEN_SIDEBAR "fullscreen-sidebar"
+#define PREF_VIEWER_SCROLL_ACTION "scroll-action"
/* keys: add to catalog */
diff --git a/gthumb/gth-viewer-page.c b/gthumb/gth-viewer-page.c
index 4ba3f220..61d215d9 100644
--- a/gthumb/gth-viewer-page.c
+++ b/gthumb/gth-viewer-page.c
@@ -191,6 +191,17 @@ gth_viewer_page_show_properties (GthViewerPage *self,
}
+gboolean
+gth_viewer_page_zoom_from_scroll (GthViewerPage *self,
+ GdkEventScroll *event)
+{
+ if (GTH_VIEWER_PAGE_GET_INTERFACE (self)->zoom_from_scroll != NULL)
+ return GTH_VIEWER_PAGE_GET_INTERFACE (self)->zoom_from_scroll (self, event);
+ else
+ return FALSE;
+}
+
+
void
gth_viewer_page_file_loaded (GthViewerPage *self,
GthFileData *file_data,
diff --git a/gthumb/gth-viewer-page.h b/gthumb/gth-viewer-page.h
index ca56255e..277a4f1d 100644
--- a/gthumb/gth-viewer-page.h
+++ b/gthumb/gth-viewer-page.h
@@ -24,6 +24,7 @@
#include <gtk/gtk.h>
#include "gth-file-data.h"
+#include "typedefs.h"
G_BEGIN_DECLS
@@ -75,6 +76,8 @@ struct _GthViewerPageInterface {
GthFileData *file_data);
void (*show_properties) (GthViewerPage *self,
gboolean show);
+ gboolean (*zoom_from_scroll) (GthViewerPage *self,
+ GdkEventScroll *event);
/*< signals >*/
@@ -112,6 +115,8 @@ void gth_viewer_page_update_info (GthViewerPage *self,
GthFileData *file_data);
void gth_viewer_page_show_properties (GthViewerPage *self,
gboolean show);
+gboolean gth_viewer_page_zoom_from_scroll (GthViewerPage *self,
+ GdkEventScroll *event);
void gth_viewer_page_file_loaded (GthViewerPage *self,
GthFileData *file_data,
GFileInfo *updated_metadata,
diff --git a/gthumb/typedefs.h b/gthumb/typedefs.h
index 8a2f85fb..784eac98 100644
--- a/gthumb/typedefs.h
+++ b/gthumb/typedefs.h
@@ -131,6 +131,12 @@ typedef enum /*< skip >*/ {
} GthColorSpace;
+typedef enum /*< skip >*/ {
+ GTH_ZOOM_IN,
+ GTH_ZOOM_OUT
+} GthZoomType;
+
+
typedef enum /*< skip >*/ {
/* Shortcut handled by Gtk, not customizable, specified for
* documentation. */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]