Enlightenment CVS committal

Author  : doursse
Project : e17
Module  : proto

Dir     : e17/proto/etk/src/lib


Modified Files:
        etk_popup_window.c 


Log Message:
_etk_popup_window_popped_windows can be NULL

===================================================================
RCS file: /cvs/e/e17/proto/etk/src/lib/etk_popup_window.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- etk_popup_window.c  28 Mar 2006 07:24:57 -0000      1.1
+++ etk_popup_window.c  4 Apr 2006 09:53:32 -0000       1.2
@@ -74,7 +74,7 @@
    if (!popup_window_type)
    {
       popup_window_type = etk_type_new("Etk_Popup_Window", ETK_WINDOW_TYPE, 
sizeof(Etk_Popup_Window), ETK_CONSTRUCTOR(_etk_popup_window_constructor), NULL);
-      
+
       _etk_popup_window_signals[ETK_POPUP_WINDOW_POPPED_UP_SIGNAL] = 
etk_signal_new("popped_up", popup_window_type, -1, etk_marshaller_VOID__VOID, 
NULL, NULL);
       _etk_popup_window_signals[ETK_POPUP_WINDOW_POPPED_DOWN_SIGNAL] = 
etk_signal_new("popped_down", popup_window_type, -1, etk_marshaller_VOID__VOID, 
NULL, NULL);
    }
@@ -101,14 +101,14 @@
       root = ETK_WINDOW(popup_window)->x_window;
       while ((parent = ecore_x_window_parent_get(root)) != 0)
          root = parent;
- 
+
       ecore_x_window_geometry_get(root, &root_x, &root_y, &root_w, &root_h);
       _etk_popup_window_input_window = ecore_x_window_input_new(root, root_x, 
root_y, root_w, root_h);
       ecore_x_window_show(_etk_popup_window_input_window);
       /* TODO: fixme pointer_grab!! */
       /* ecore_x_pointer_confine_grab(_etk_popup_window_input_window); */
       ecore_x_keyboard_grab(_etk_popup_window_input_window);
-      
+
       _etk_popup_window_key_down_handler = 
ecore_event_handler_add(ECORE_X_EVENT_KEY_DOWN, _etk_popup_window_key_down_cb, 
popup_window);
       _etk_popup_window_key_up_handler = 
ecore_event_handler_add(ECORE_X_EVENT_KEY_UP, _etk_popup_window_key_up_cb, 
popup_window);
       _etk_popup_window_mouse_up_handler = 
ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_UP, 
_etk_popup_window_mouse_up_cb, popup_window);
@@ -116,16 +116,16 @@
 
       _etk_popup_window_popup_timestamp = ecore_x_current_time_get();
    }
-   
+
    etk_window_move(ETK_WINDOW(popup_window), x, y);
    etk_widget_show(ETK_WIDGET(popup_window));
    evas_event_feed_mouse_move(ETK_TOPLEVEL_WIDGET(popup_window)->evas, 
-100000, -100000, ecore_x_current_time_get(), NULL);
    evas_event_feed_mouse_in(ETK_TOPLEVEL_WIDGET(popup_window)->evas, 
ecore_x_current_time_get(), NULL);
    _etk_popup_window_popped_windows = 
evas_list_append(_etk_popup_window_popped_windows, popup_window);
-   
+
    etk_popup_window_focused_window_set(popup_window);
    _etk_popup_window_slide_timer_update(popup_window);
-   
+
    
etk_signal_emit(_etk_popup_window_signals[ETK_POPUP_WINDOW_POPPED_UP_SIGNAL], 
ETK_OBJECT(popup_window), NULL);
 }
 
@@ -147,15 +147,17 @@
  */
 void etk_popup_window_popdown(Etk_Popup_Window *popup_window)
 {
-   Evas_List *l;
+   Evas_List *l, *last;
 
    if (!popup_window || !(l = 
evas_list_find_list(_etk_popup_window_popped_windows, popup_window)))
       return;
 
    etk_widget_hide(ETK_WIDGET(popup_window));
    _etk_popup_window_popped_windows = 
evas_list_remove_list(_etk_popup_window_popped_windows, l);
-   
etk_popup_window_focused_window_set(ETK_POPUP_WINDOW(evas_list_last(_etk_popup_window_popped_windows)));
-   
+   last = evas_list_last(_etk_popup_window_popped_windows);
+   if (last)
+      etk_popup_window_focused_window_set(ETK_POPUP_WINDOW(last->data));
+
    if (!_etk_popup_window_popped_windows)
    {
       /* TODO: pointer ungrab, fixme!! */
@@ -163,7 +165,7 @@
       ecore_x_keyboard_ungrab();
       ecore_x_window_del(_etk_popup_window_input_window);
       _etk_popup_window_input_window = 0;
-      
+
       ecore_event_handler_del(_etk_popup_window_key_down_handler);
       ecore_event_handler_del(_etk_popup_window_key_up_handler);
       ecore_event_handler_del(_etk_popup_window_mouse_up_handler);
@@ -173,7 +175,7 @@
       _etk_popup_window_mouse_up_handler = NULL;
       _etk_popup_window_mouse_move_handler = NULL;
    }
-   
+
    
etk_signal_emit(_etk_popup_window_signals[ETK_POPUP_WINDOW_POPPED_DOWN_SIGNAL], 
ETK_OBJECT(popup_window), NULL);
 }
 
@@ -198,7 +200,7 @@
 {
    if (!popup_window)
       return;
-   
+
    etk_window_decorated_set(ETK_WINDOW(popup_window), ETK_FALSE);
    etk_window_skip_taskbar_hint_set(ETK_WINDOW(popup_window), ETK_TRUE);
    etk_window_skip_pager_hint_set(ETK_WINDOW(popup_window), ETK_TRUE);
@@ -254,12 +256,12 @@
 {
    Etk_Popup_Window *popup_window;
    Ecore_X_Event_Key_Down *key_event;
-   
+
    if (!(popup_window = ETK_POPUP_WINDOW(data)) || !(key_event = event) || 
key_event->win != _etk_popup_window_input_window)
       return 1;
    if (!_etk_popup_window_focused_window)
       return 1;
-   
+
    
evas_event_feed_key_down(ETK_TOPLEVEL_WIDGET(_etk_popup_window_focused_window)->evas,
 key_event->keyname,
       key_event->keysymbol, key_event->key_compose, NULL, key_event->time, 
NULL);
    return 1;
@@ -270,12 +272,12 @@
 {
    Etk_Popup_Window *popup_window;
    Ecore_X_Event_Key_Up *key_event;
-   
+
    if (!(popup_window = ETK_POPUP_WINDOW(data)) || !(key_event = event) || 
key_event->win != _etk_popup_window_input_window)
       return 1;
    if (!_etk_popup_window_focused_window)
       return 1;
-   
+
    
evas_event_feed_key_up(ETK_TOPLEVEL_WIDGET(_etk_popup_window_focused_window)->evas,
 key_event->keyname,
       key_event->keysymbol, key_event->key_compose, NULL, key_event->time, 
NULL);
    return 1;
@@ -291,7 +293,7 @@
    Evas_List *l;
    Ecore_X_Event_Mouse_Button_Up *mouse_event;
    Etk_Bool pointer_over_window = ETK_FALSE;
-   
+
    if (!(popup_window = ETK_POPUP_WINDOW(data)) || !(mouse_event = event) || 
mouse_event->win != _etk_popup_window_input_window)
       return 1;
 
@@ -299,7 +301,7 @@
    for (l = _etk_popup_window_popped_windows; l; l = l->next)
    {
       int px, py, pw, ph;
-      
+
       pwin = ETK_POPUP_WINDOW(l->data);
       etk_window_geometry_get(ETK_WINDOW(pwin), &px, &py, &pw, &ph);
       if (_etk_popup_window_mouse_x >= px && _etk_popup_window_mouse_x <= px + 
pw && _etk_popup_window_mouse_y >= py && _etk_popup_window_mouse_y <= py + ph)
@@ -338,11 +340,11 @@
       pwin = ETK_POPUP_WINDOW(l->data);
       etk_window_geometry_get(ETK_WINDOW(pwin), &px, &py, NULL, NULL);
       evas_event_feed_mouse_move(ETK_TOPLEVEL_WIDGET(pwin)->evas, 
mouse_event->x - px, mouse_event->y - py, mouse_event->time, NULL);
-      
+
       /* Start to make the popup window slide if needed */
       _etk_popup_window_slide_timer_update(pwin);
    }
-   
+
    return 1;
 }
 
@@ -373,7 +375,7 @@
       result |= ETK_POPUP_WINDOW_TOP_EDGE;
    if (py + ph > ry + rh)
       result |= ETK_POPUP_WINDOW_BOTTOM_EDGE;
-      
+
    return result;
 }
 
@@ -385,7 +387,7 @@
 
    if (_etk_popup_window_input_window == 0)
       return ETK_POPUP_WINDOW_NO_EDGE;
-   
+
    ecore_x_window_geometry_get(_etk_popup_window_input_window, &rx, &ry, &rw, 
&rh);
    if (_etk_popup_window_mouse_x - rx + 1 >= rw)
       result |= ETK_POPUP_WINDOW_RIGHT_EDGE;




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to