summaryrefslogtreecommitdiff
path: root/gtkknob.c
diff options
context:
space:
mode:
authorAndrej Shadura <andrew.shadura@collabora.co.uk>2021-10-07 16:12:10 +0200
committerAndrej Shadura <andrew.shadura@collabora.co.uk>2021-10-07 16:12:10 +0200
commit45ee5d246b838240fce51e3735188ea8f88acf27 (patch)
treed3b48fd7eb44ee6d59551e5312aae7f797bc2900 /gtkknob.c
parent314596035337348abbc934d96e4d83d4398f64f1 (diff)
Import Upstream version 0.4.0
Diffstat (limited to 'gtkknob.c')
-rw-r--r--gtkknob.c38
1 files changed, 22 insertions, 16 deletions
diff --git a/gtkknob.c b/gtkknob.c
index ddc0231..4f6cf3f 100644
--- a/gtkknob.c
+++ b/gtkknob.c
@@ -18,7 +18,8 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA.
*****************************************************************************/
#include <math.h>
@@ -153,6 +154,7 @@ gtk_knob_init (GtkKnob *knob) {
gtk_widget_set_has_window(GTK_WIDGET(knob), FALSE);
gtk_widget_set_hexpand(GTK_WIDGET(knob), FALSE);
gtk_widget_set_vexpand(GTK_WIDGET(knob), FALSE);
+ gtk_widget_add_events(GTK_WIDGET(knob), GDK_SCROLL_MASK);
}
@@ -367,7 +369,7 @@ gtk_knob_get_preferred_width(GtkWidget *widget,
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_KNOB (widget));
- *minimum_width = *natural_width = GTK_KNOB(widget)->width;
+ *minimum_width = *natural_width = GTK_KNOB(widget)->width;
}
static void
@@ -378,7 +380,7 @@ gtk_knob_get_preferred_height(GtkWidget *widget,
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_KNOB (widget));
- *minimum_height = *natural_height = GTK_KNOB(widget)->height;
+ *minimum_height = *natural_height = GTK_KNOB(widget)->height;
}
@@ -624,7 +626,7 @@ static gint gtk_knob_key_press(GtkWidget *widget, GdkEventKey *event)
static gint
gtk_knob_motion_notify(GtkWidget *widget, GdkEventMotion *event) {
GtkKnob *knob;
- GdkModifierType mods;
+ GdkWindow *window;
gint x, y;
g_return_val_if_fail (widget != NULL, FALSE);
@@ -636,10 +638,6 @@ gtk_knob_motion_notify(GtkWidget *widget, GdkEventMotion *event) {
x = event->x;
y = event->y;
- if (event->is_hint || (event->window != gtk_widget_get_window(widget))) {
- gdk_window_get_pointer(gtk_widget_get_window(widget), &x, &y, &mods);
- }
-
switch (knob->state) {
case STATE_PRESSED:
@@ -647,14 +645,22 @@ gtk_knob_motion_notify(GtkWidget *widget, GdkEventMotion *event) {
/* fall through */
case STATE_DRAGGING:
- if (mods & GDK_BUTTON1_MASK) {
- gtk_knob_update_mouse (knob, x, y, TRUE);
- return TRUE;
- }
- else if (mods & GDK_BUTTON3_MASK) {
- gtk_knob_update_mouse (knob, x, y, FALSE);
- return TRUE;
- }
+ window = gtk_widget_get_window(widget);
+ if (event->is_hint || (event->window != window)) {
+ GdkModifierType mods;
+ GdkDeviceManager *device_manager = gdk_display_get_device_manager(gdk_window_get_display(window));
+ GdkDevice *pointer = gdk_device_manager_get_client_pointer(device_manager);
+
+ gdk_window_get_device_position(window, pointer, &x, &y, &mods);
+ if (mods & GDK_BUTTON1_MASK) {
+ gtk_knob_update_mouse (knob, x, y, TRUE);
+ return TRUE;
+ }
+ else if (mods & GDK_BUTTON3_MASK) {
+ gtk_knob_update_mouse (knob, x, y, FALSE);
+ return TRUE;
+ }
+ }
break;
}