diff options
author | Andrej Shadura <andrew.shadura@collabora.co.uk> | 2021-10-07 16:12:10 +0200 |
---|---|---|
committer | Andrej Shadura <andrew.shadura@collabora.co.uk> | 2021-10-07 16:12:10 +0200 |
commit | 45ee5d246b838240fce51e3735188ea8f88acf27 (patch) | |
tree | d3b48fd7eb44ee6d59551e5312aae7f797bc2900 /gtkknob.c | |
parent | 314596035337348abbc934d96e4d83d4398f64f1 (diff) |
Import Upstream version 0.4.0
Diffstat (limited to 'gtkknob.c')
-rw-r--r-- | gtkknob.c | 38 |
1 files changed, 22 insertions, 16 deletions
@@ -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; } |