firefox/thunderbird menu stuffo
authorCarsten Haitzler <raster@rasterman.com>
Tue, 15 Mar 2005 09:35:51 +0000 (09:35 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Tue, 15 Mar 2005 09:35:51 +0000 (09:35 +0000)
SVN revision: 13737

TODO
src/bin/e_border.c

diff --git a/TODO b/TODO
index a179c61..28dd82c 100644 (file)
--- a/TODO
+++ b/TODO
@@ -33,8 +33,6 @@ ISSUES:
 * pager edje gfx...
 * pager needs desktop bg thumbnail wrapper/handler and cache system
 * pager needs to support miniature versions of bg object
-* in firefox if you scan over the menu bar selecting menus sometimes focus will flicker in/out of ffox
-* on shade window loses focus (bad... but ok) but on unshade it doesnt get it back
 * consoldiate client lists - we have client lists for containers, zones, desks AND e_borders.c consolidate into 1 list that has all borders with their stacking and what desk they belong to (and thus zone and container)
 * virtual desktops need an overhaul. hacked in waay too quickly.
 * virtual desktops need fixing to work with zones properly
index 37bf98f..1360975 100644 (file)
@@ -635,6 +635,7 @@ e_border_focus_set(E_Border *bd, int focus, int set)
    E_OBJECT_CHECK(bd);
    E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
    if (!bd->client.icccm.accepts_focus) return;
+//   printf("flag focus to %i\n", focus);
    if ((focus) && (!bd->focused))
      edje_object_signal_emit(bd->bg_object, "active", "");
    else if ((!focus) && (bd->focused))
@@ -642,6 +643,7 @@ e_border_focus_set(E_Border *bd, int focus, int set)
    bd->focused = focus;
    if (set)
      {
+//     printf("send focus to %i\n", focus);
        if (bd->focused)
          {
             if ((focused != bd) && (focused))
@@ -671,7 +673,7 @@ e_border_focus_set(E_Border *bd, int focus, int set)
  * 
  * now the focus is on Y where it should be on X
  */
-//               ecore_x_icccm_take_focus_send(bd->client.win, ECORE_X_CURRENT_TIME);
+                 ecore_x_icccm_take_focus_send(bd->client.win, ECORE_X_CURRENT_TIME);
                  e_hints_active_window_set(bd->container->manager, bd->client.win);
                  ecore_x_window_focus(bd->client.win);
               }
@@ -1524,7 +1526,8 @@ _e_border_cb_window_focus_in(void *data, int ev_type, void *ev)
        t = time(NULL);
        ct = ctime(&t);
        ct[strlen(ct) - 1] = 0;
-       printf("FF ->IN 0x%x %s md=%s dt=%s\n",
+       printf("FF ->IN %i 0x%x %s md=%s dt=%s\n",
+              e->time,
               e->win,
               ct,
               modes[e->mode],
@@ -1568,7 +1571,8 @@ _e_border_cb_window_focus_out(void *data, int ev_type, void *ev)
        t = time(NULL);
        ct = ctime(&t);
        ct[strlen(ct) - 1] = 0;
-       printf("FF <-OUT 0x%x %s md=%s dt=%s\n",
+       printf("FF <-OUT %i 0x%x %s md=%s dt=%s\n",
+              e->time,
               e->win,
               ct,
               modes[e->mode],
@@ -1578,6 +1582,7 @@ _e_border_cb_window_focus_out(void *data, int ev_type, void *ev)
    if (e->mode == ECORE_X_EVENT_MODE_NORMAL)
      {
        if (e->detail == ECORE_X_EVENT_DETAIL_INFERIOR) return 1;
+       else if (e->detail == ECORE_X_EVENT_DETAIL_NON_LINEAR) return 1;
      }
    else if (e->mode == ECORE_X_EVENT_MODE_GRAB)
      {
@@ -1587,16 +1592,11 @@ _e_border_cb_window_focus_out(void *data, int ev_type, void *ev)
      }
    else if (e->mode == ECORE_X_EVENT_MODE_UNGRAB)
      {
-       /* 1. enter moz window
-        * 2. activate menu
-        * 3. leave moz window
-        * 4. click
+       /* for firefox/thunderbird (xul) menu walking */
        if (e->detail == ECORE_X_EVENT_DETAIL_INFERIOR) return 1;
-       */
      }
    else if (e->mode == ECORE_X_EVENT_MODE_WHILE_GRABBED)
      {
-       /* FIXME: If window is grabbed, shouldn't we always return 1? */
        if (e->detail == ECORE_X_EVENT_DETAIL_ANCESTOR) return 1;
        else if (e->detail == ECORE_X_EVENT_DETAIL_INFERIOR) return 1;
      }
@@ -1871,8 +1871,18 @@ _e_border_cb_mouse_in(void *data, int type, void *event)
               details[ev->detail]);
      }
 #endif
-//   if (ev->mode == ECORE_X_EVENT_MODE_GRAB) return 1;
-//   if (ev->mode == ECORE_X_EVENT_MODE_UNGRAB) return 1;
+/*   
+   if ((ev->mode == ECORE_X_EVENT_MODE_GRAB) &&
+       (ev->detail == ECORE_X_EVENT_DETAIL_NON_LINEAR_VIRTUAL) &&
+       (ev->win == bd->event_win) &&
+       (ev->event_win == bd->win))
+     return 1;
+   else if ((ev->mode == ECORE_X_EVENT_MODE_UNGRAB) &&
+       (ev->detail == ECORE_X_EVENT_DETAIL_NON_LINEAR_VIRTUAL) &&
+       (ev->win == bd->event_win) &&
+       (ev->event_win == bd->win))
+     return 1;
+ */
    if (ev->event_win == bd->win)
      {
        /* FIXME: this would normally put focus on the client on pointer */
@@ -2683,40 +2693,50 @@ _e_border_eval(E_Border *bd)
    if ((bd->changes.shading))
      {
        /*  show at start of unshade (but don't hide until end of shade) */
-       if (bd->shaded) ecore_x_window_show(bd->client.shell_win);
+       if (bd->shaded)
+//       ecore_x_window_show(bd->client.shell_win);
+         ecore_x_window_raise(bd->client.shell_win);
        bd->changes.shading = 0;
      }
    if ((bd->changes.shaded) && (bd->changes.pos) && (bd->changes.size))
      {
        if (bd->shaded)
-         ecore_x_window_hide(bd->client.shell_win);
+//       ecore_x_window_hide(bd->client.shell_win);
+         ecore_x_window_lower(bd->client.shell_win);
        else
-         ecore_x_window_show(bd->client.shell_win);
+//       ecore_x_window_show(bd->client.shell_win);
+         ecore_x_window_raise(bd->client.shell_win);
        bd->changes.shaded = 0;
      }
    else if ((bd->changes.shaded) && (bd->changes.pos))
      {
        if (bd->shaded)
-         ecore_x_window_hide(bd->client.shell_win);
+//       ecore_x_window_hide(bd->client.shell_win);
+         ecore_x_window_lower(bd->client.shell_win);
        else
-         ecore_x_window_show(bd->client.shell_win);
+//       ecore_x_window_show(bd->client.shell_win);
+         ecore_x_window_raise(bd->client.shell_win);
        bd->changes.size = 1;
        bd->changes.shaded = 0;
      }
    else if ((bd->changes.shaded) && (bd->changes.size))
      {
        if (bd->shaded)
-         ecore_x_window_hide(bd->client.shell_win);
+//       ecore_x_window_hide(bd->client.shell_win);
+         ecore_x_window_lower(bd->client.shell_win);
        else
-         ecore_x_window_show(bd->client.shell_win);
+//       ecore_x_window_show(bd->client.shell_win);
+         ecore_x_window_raise(bd->client.shell_win);
        bd->changes.shaded = 0;
      }
    else if (bd->changes.shaded)
      {
        if (bd->shaded)
-         ecore_x_window_hide(bd->client.shell_win);
+//       ecore_x_window_hide(bd->client.shell_win);
+         ecore_x_window_lower(bd->client.shell_win);
        else
-         ecore_x_window_show(bd->client.shell_win);
+//       ecore_x_window_show(bd->client.shell_win);
+         ecore_x_window_raise(bd->client.shell_win);
        bd->changes.size = 1;
        bd->changes.shaded = 0;
      }