[gtk+/wip/overlay-scrollbar] Add a way to override autodetection



commit 5bebc7204ea2c496425022685633267a0dc8adef
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Oct 7 09:42:17 2014 -0400

    Add a way to override autodetection
    
    This is just for test purposes.

 tests/overlayscroll.c |   81 +++++++++++++++++++++++++++++++++++--------------
 1 files changed, 58 insertions(+), 23 deletions(-)
---
diff --git a/tests/overlayscroll.c b/tests/overlayscroll.c
index d436b67..2d81f73 100644
--- a/tests/overlayscroll.c
+++ b/tests/overlayscroll.c
@@ -24,7 +24,8 @@ typedef struct {
   gint64 last_scroll_time;
   gboolean over;
   gboolean dragging;
-  gboolean enabled;
+  gboolean autodetect;
+  gboolean touch_mode;
 } IndicatorData;
 
 IndicatorData *
@@ -50,7 +51,7 @@ conceil_scrollbar (gpointer data)
   IndicatorData *id = get_indicator_data (sb);
 
   if (g_get_monotonic_time () - id->last_scroll_time >= 1000000 &&
-      id->enabled &&
+      id->touch_mode &&
       !id->over &&
       !id->dragging)
     {
@@ -66,7 +67,7 @@ value_changed (GtkAdjustment *adj, GtkWidget *sb)
 {
   IndicatorData *id = get_indicator_data (sb);
 
-  if (id->enabled &&
+  if (id->touch_mode &&
       !gtk_revealer_get_reveal_child (GTK_REVEALER (id->rv)))
     gtk_revealer_set_reveal_child (GTK_REVEALER (id->rv), TRUE);
 
@@ -190,32 +191,58 @@ has_mouse (GdkDeviceManager *dm)
 }
 
 static void
-update_mouse_mode (GdkDeviceManager *dm, GtkWidget *sb)
+update_touch_mode (IndicatorData *id, gboolean touch_mode)
 {
-  IndicatorData *id = get_indicator_data (sb);
-
-  id->enabled = !has_mouse (dm);
+  id->touch_mode = touch_mode;
   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (id->sw),
                                   GTK_POLICY_NEVER,
-                                  id->enabled ? GTK_POLICY_EXTERNAL : GTK_POLICY_AUTOMATIC);
+                                  id->touch_mode ? GTK_POLICY_EXTERNAL : GTK_POLICY_AUTOMATIC);
 
-  g_print ("touch mode now %s\n", id->enabled ? "ON" : "OFF");
+  g_print ("touch mode now %s\n", id->touch_mode ? "ON" : "OFF");
 }
 
 static void
-device_added (GdkDeviceManager *dm, GdkDevice *device, GtkWidget *sb)
+device_added (GdkDeviceManager *dm, GdkDevice *device, IndicatorData *id)
 {
-  update_mouse_mode (dm, sb);
+  if (id->autodetect)
+    update_touch_mode (id, !has_mouse (dm));
 }
 
 static void
-device_removed (GdkDeviceManager *dm, GdkDevice *device, GtkWidget *sb)
+device_removed (GdkDeviceManager *dm, GdkDevice *device, IndicatorData *id)
 {
-  /* We need to work around the fact that ::device-removed is emitted
-   * before the device is removed from the list.
-   */
-  g_object_set_data (G_OBJECT (device), "removed", GINT_TO_POINTER (1));
-  update_mouse_mode (dm, sb);
+  if (id->autodetect)
+    {
+      /* We need to work around the fact that ::device-removed is emitted
+       * before the device is removed from the list.
+       */
+      g_object_set_data (G_OBJECT (device), "removed", GINT_TO_POINTER (1));
+      update_touch_mode (id, !has_mouse (dm));
+    }
+}
+
+static void
+mode_changed (GtkComboBox *combo, IndicatorData *id)
+{
+  GdkDeviceManager *dm;
+  gint active = gtk_combo_box_get_active (combo);
+
+  dm = gdk_display_get_device_manager (gdk_display_get_default ());
+  if (active == 0)
+    {
+      id->autodetect = TRUE;
+      update_touch_mode (id, !has_mouse (dm));
+    }
+  else if (active == 1)
+    {
+      id->autodetect = FALSE;
+      update_touch_mode (id, FALSE);
+    }
+  else
+    {
+      id->autodetect = FALSE;
+      update_touch_mode (id, TRUE);
+    }
 }
 
 static gchar *
@@ -258,6 +285,8 @@ main (int argc, char *argv[])
   GtkWidget *ov;
   GtkWidget *rv;
   GtkWidget *sb;
+  GtkWidget *sb2;
+  GtkWidget *combo;
   GtkAdjustment *adj;
   GtkCssProvider *provider;
   IndicatorData *id;
@@ -319,20 +348,26 @@ main (int argc, char *argv[])
   g_signal_connect (adj, "value-changed", G_CALLBACK (value_changed), sb);
   g_timeout_add (500, conceil_scrollbar, sb);
 
-#if 0
-  GtkWidget *sb2;
+  combo = gtk_combo_box_text_new ();
+  gtk_widget_set_valign (combo, GTK_ALIGN_START);
+  gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), "Autodetect");
+  gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), "Mouse mode");
+  gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), "Touch mode");
+  g_signal_connect (combo, "changed", G_CALLBACK (mode_changed), id);
+  gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
+
+  gtk_container_add (GTK_CONTAINER (box), combo);
+
   sb2 = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, adj);
   gtk_container_add (GTK_CONTAINER (box), sb2);
-#endif
 
   gtk_widget_show_all (window);
 
   dm = gdk_display_get_device_manager (gdk_display_get_default ());
   list_devices (dm);
 
-  g_signal_connect (dm, "device-added", G_CALLBACK (device_added), sb);
-  g_signal_connect (dm, "device-removed", G_CALLBACK (device_removed), sb);
-  update_mouse_mode (dm, sb);
+  g_signal_connect (dm, "device-added", G_CALLBACK (device_added), id);
+  g_signal_connect (dm, "device-removed", G_CALLBACK (device_removed), id);
 
   gtk_main ();
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]