1*4882a593SmuzhiyunFrom 61c1d48cd54903c4767cb2d5bd42cf04cb29127b Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com>
3*4882a593SmuzhiyunDate: Mon, 8 Jul 2019 14:54:25 +0800
4*4882a593SmuzhiyunSubject: [PATCH 3/3] Support move timeout when outline moving
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunMove the window after idling for 400ms in outline moving mode.
7*4882a593Smuzhiyun
8*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
9*4882a593Smuzhiyun---
10*4882a593Smuzhiyun openbox/moveresize.c | 24 ++++++++++++++++++++++++
11*4882a593Smuzhiyun 1 file changed, 24 insertions(+)
12*4882a593Smuzhiyun
13*4882a593Smuzhiyundiff --git a/openbox/moveresize.c b/openbox/moveresize.c
14*4882a593Smuzhiyunindex 1db4726c..d75901e8 100644
15*4882a593Smuzhiyun--- a/openbox/moveresize.c
16*4882a593Smuzhiyun+++ b/openbox/moveresize.c
17*4882a593Smuzhiyun@@ -70,6 +70,7 @@ static guint sync_timer = 0;
18*4882a593Smuzhiyun #endif
19*4882a593Smuzhiyun static glong last_move_time = 0;
20*4882a593Smuzhiyun static guint move_timer = 0;
21*4882a593Smuzhiyun+static guint move_timeout_timer = 0;
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun static GC outline_gc = NULL;
24*4882a593Smuzhiyun static gint outline_x = 0;
25*4882a593Smuzhiyun@@ -339,6 +340,8 @@ void moveresize_end(gboolean cancel)
26*4882a593Smuzhiyun     } else {
27*4882a593Smuzhiyun         if (move_timer) g_source_remove(move_timer);
28*4882a593Smuzhiyun         move_timer = 0;
29*4882a593Smuzhiyun+        if (move_timeout_timer) g_source_remove(move_timeout_timer);
30*4882a593Smuzhiyun+        move_timeout_timer = 0;
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun         moveresize_clear_outline();
33*4882a593Smuzhiyun     }
34*4882a593Smuzhiyun@@ -475,6 +478,22 @@ static gboolean move_func(gpointer data)
35*4882a593Smuzhiyun     return FALSE; /* don't repeat */
36*4882a593Smuzhiyun }
37*4882a593Smuzhiyun
38*4882a593Smuzhiyun+static gboolean move_timeout_func(gpointer data)
39*4882a593Smuzhiyun+{
40*4882a593Smuzhiyun+    if (move_timer) g_source_remove(move_timer);
41*4882a593Smuzhiyun+    move_timer = 0;
42*4882a593Smuzhiyun+
43*4882a593Smuzhiyun+    moveresize_clear_outline();
44*4882a593Smuzhiyun+    client_configure(moveresize_client, cur_x, cur_y, cur_w, cur_h,
45*4882a593Smuzhiyun+                     TRUE, FALSE, FALSE);
46*4882a593Smuzhiyun+
47*4882a593Smuzhiyun+    popup_hide(popup);
48*4882a593Smuzhiyun+    popup->client = NULL;
49*4882a593Smuzhiyun+
50*4882a593Smuzhiyun+    move_timeout_timer = 0;
51*4882a593Smuzhiyun+    return FALSE; /* don't repeat */
52*4882a593Smuzhiyun+}
53*4882a593Smuzhiyun+
54*4882a593Smuzhiyun static void do_move(gboolean keyboard, gint keydist)
55*4882a593Smuzhiyun {
56*4882a593Smuzhiyun     gint resist;
57*4882a593Smuzhiyun@@ -504,6 +523,11 @@ static void do_move(gboolean keyboard, gint keydist)
58*4882a593Smuzhiyun             last_move_time = next_ms;
59*4882a593Smuzhiyun         }
60*4882a593Smuzhiyun     }
61*4882a593Smuzhiyun+
62*4882a593Smuzhiyun+    if (!config_resize_redraw) {
63*4882a593Smuzhiyun+        if (move_timeout_timer) g_source_remove(move_timeout_timer);
64*4882a593Smuzhiyun+        move_timeout_timer = g_timeout_add(400, move_timeout_func, NULL);
65*4882a593Smuzhiyun+    }
66*4882a593Smuzhiyun }
67*4882a593Smuzhiyun
68*4882a593Smuzhiyun static void do_resize(void)
69*4882a593Smuzhiyun--
70*4882a593Smuzhiyun2.17.1
71*4882a593Smuzhiyun
72