]> Dogcows Code - chaz/openbox/blobdiff - openbox/prompt.c
Merge branch 'backport' into work
[chaz/openbox] / openbox / prompt.c
index 31d805ae2a6000ff133a8c9b9ddb4792a6de4e3f..4f8930d7872d4261de50fce567ad8b9c0b128c80 100644 (file)
@@ -57,7 +57,7 @@ void prompt_startup(gboolean reconfig)
     RrColor *c_button, *c_focus, *c_press, *c_pfocus;
 
     /* note: this is not a copy, don't free it */
-    prompt_a_bg = ob_rr_theme->osd_hilite_bg;
+    prompt_a_bg = ob_rr_theme->osd_bg;
 
     prompt_a_button = RrAppearanceCopy(ob_rr_theme->a_focused_unpressed_close);
     prompt_a_focus = RrAppearanceCopy(ob_rr_theme->a_hover_focused_close);
@@ -95,7 +95,7 @@ void prompt_startup(gboolean reconfig)
     prompt_a_button->texture[0].data.text.color = c_button;
     prompt_a_focus->texture[0].data.text.color = c_focus;
     prompt_a_press->texture[0].data.text.color = c_press;
-    prompt_a_pfocus->texture[0].data.text.color = c_press;
+    prompt_a_pfocus->texture[0].data.text.color = c_pfocus;
 
     prompt_a_focus->texture[1].data.lineart.color = c_focus;
     prompt_a_focus->texture[2].data.lineart.color = c_focus;
@@ -292,7 +292,6 @@ static void prompt_layout(ObPrompt *self)
         self->button[i].width = MAX(self->button[i].width, bw);
         self->button[i].height = MAX(self->button[i].height, bh);
 
-
         self->button[i].width += BUTTON_HMARGIN * 2;
         self->button[i].height += BUTTON_VMARGIN * 2;
 
@@ -412,10 +411,10 @@ static void render_button(ObPrompt *self, ObPromptElement *e)
 {
     RrAppearance *a;
 
-    if (e->pressed && self->focus == e) a = prompt_a_pfocus;
-    else if (self->focus == e)          a = prompt_a_focus;
-    else if (e->pressed)                a = prompt_a_press;
-    else                                a = prompt_a_button;
+    if (e->hover && self->focus == e) a = prompt_a_pfocus;
+    else if (self->focus == e)        a = prompt_a_focus;
+    else if (e->pressed)              a = prompt_a_press;
+    else                              a = prompt_a_button;
 
     a->surface.parent = prompt_a_bg;
     a->surface.parentx = e->x;
@@ -532,23 +531,23 @@ gboolean prompt_key_event(ObPrompt *self, XEvent *e)
     if (e->xkey.state != 0 && e->xkey.state != shift_mask)
         return FALSE;
 
-    if (e->xkey.keycode == ob_keycode(OB_KEY_ESCAPE))
+    if (ob_keycode_match(e->xkey.keycode, OB_KEY_ESCAPE))
         prompt_cancel(self);
-    else if (e->xkey.keycode == ob_keycode(OB_KEY_RETURN) ||
-             e->xkey.keycode == ob_keycode(OB_KEY_SPACE))
+    else if (ob_keycode_match(e->xkey.keycode, OB_KEY_RETURN) ||
+             ob_keycode_match(e->xkey.keycode, OB_KEY_SPACE))
     {
         prompt_run_callback(self, self->focus->result);
     }
-    else if (e->xkey.keycode == ob_keycode(OB_KEY_TAB) ||
-             e->xkey.keycode == ob_keycode(OB_KEY_LEFT) ||
-             e->xkey.keycode == ob_keycode(OB_KEY_RIGHT))
+    else if (ob_keycode_match(e->xkey.keycode, OB_KEY_TAB) ||
+             ob_keycode_match(e->xkey.keycode, OB_KEY_LEFT) ||
+             ob_keycode_match(e->xkey.keycode, OB_KEY_RIGHT))
     {
         gint i;
         gboolean left;
         ObPromptElement *oldfocus;
 
-        left = e->xkey.keycode == ob_keycode(OB_KEY_LEFT) ||
-            (e->xkey.keycode == ob_keycode(OB_KEY_TAB) && shift);
+        left = ob_keycode_match(e->xkey.keycode, OB_KEY_LEFT) ||
+            (ob_keycode_match(e->xkey.keycode, OB_KEY_TAB) && shift);
         oldfocus = self->focus;
 
         for (i = 0; i < self->n_buttons; ++i)
@@ -588,25 +587,28 @@ gboolean prompt_mouse_event(ObPrompt *self, XEvent *e)
 
         oldfocus = self->focus;
 
-        but->pressed = TRUE;
+        but->pressed = but->hover = TRUE;
         self->focus = but;
 
         if (oldfocus != but) render_button(self, oldfocus);
         render_button(self, but);
     }
     else if (e->type == ButtonRelease) {
-        if (but->pressed)
+        if (but->hover)
             prompt_run_callback(self, but->result);
+        but->pressed = FALSE;
     }
     else if (e->type == MotionNotify) {
-        gboolean press;
+        if (but->pressed) {
+            gboolean hover;
 
-        press = (e->xmotion.x >= 0 && e->xmotion.y >= 0 &&
-                 e->xmotion.x < but->width && e->xmotion.y < but->height);
+            hover = (e->xmotion.x >= 0 && e->xmotion.y >= 0 &&
+                     e->xmotion.x < but->width && e->xmotion.y < but->height);
 
-        if (press != but->pressed) {
-            but->pressed = press;
-            render_button(self, but);
+            if (hover != but->hover) {
+                but->hover = hover;
+                render_button(self, but);
+            }
         }
     }
     return TRUE;
This page took 0.026902 seconds and 4 git commands to generate.