Enlightenment CVS committal

Author  : codewarrior
Project : e17
Module  : proto

Dir     : e17/proto/etk/src/lib


Modified Files:
        etk_types.h etk_widget.c etk_window.c etk_window.h 


Log Message:
- this started out as a patch from ezek, but got heavily modified to allow new 
window positioning according to mouse and center on parent (if parent = another 
window, then center on that, if not, center on root window)

===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_types.h,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -3 -r1.29 -r1.30
--- etk_types.h 15 Feb 2006 18:36:55 -0000      1.29
+++ etk_types.h 27 Feb 2006 22:14:48 -0000      1.30
@@ -45,6 +45,7 @@
 typedef enum   _Etk_Pointer_Type Etk_Pointer_Type;
 typedef struct _Etk_Toplevel_Widget Etk_Toplevel_Widget;
 typedef struct _Etk_Window Etk_Window;
+typedef enum   _Etk_Window_Position Etk_Window_Position;
 typedef struct _Etk_Dialog Etk_Dialog;
 typedef enum   _Etk_Dialog_Response_ID Etk_Dialog_Response_ID;
 typedef struct _Etk_Container Etk_Container;
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_widget.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -3 -r1.40 -r1.41
--- etk_widget.c        27 Feb 2006 22:00:17 -0000      1.40
+++ etk_widget.c        27 Feb 2006 22:14:49 -0000      1.41
@@ -517,10 +517,11 @@
    if (!widget)
       return;
 
-   if (!widget->visibility_locked)
-      etk_widget_show(widget);
    for (l = widget->children; l; l = l->next)
       etk_widget_show_all(ETK_WIDGET(l->data));
+   
+   if (!widget->visibility_locked)
+     etk_widget_show(widget);   
 }
 
 /**
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_window.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- etk_window.c        16 Feb 2006 01:40:16 -0000      1.13
+++ etk_window.c        27 Feb 2006 22:14:50 -0000      1.14
@@ -460,6 +460,63 @@
    return ETK_TRUE;
 }
 
+/**
+ * @brief Moves the window to a defined position
+ * @param window a window
+ * @param position
+ */
+void etk_window_position_set(Etk_Window *window, Etk_Window_Position position)
+{
+#if HAVE_ECORE_X   
+   int w, h;
+   int x2, y2, w2, h2;
+   
+   if (!window)
+     return;
+   
+   switch (position)
+     {
+      case ETK_WINDOW_POSITION_CENTER:
+       
+       if(!(ETK_WIDGET(window))->visible)
+       {
+          window->position = ETK_WINDOW_POSITION_CENTER;
+          break;
+       }
+       
+       if(window->parent)        
+         ecore_evas_geometry_get(window->parent->ecore_evas, 
+                                 &x2, &y2, &w2, &h2);
+       else
+         ecore_x_window_geometry_get(ecore_x_window_root_first_get(), 
+                                     &x2, &y2, &w2, &h2);      
+       
+       ecore_evas_geometry_get(window->ecore_evas, NULL, NULL, &w, &h);
+       ecore_evas_move(window->ecore_evas, x2 + (w2 - w) / 2, 
+                                           y2 + (h2 - h) / 2);
+       break;
+       
+      case ETK_WINDOW_POSITION_MOUSE:
+       ecore_x_pointer_xy_get(ecore_x_window_root_first_get(), &x2, &y2);
+       ecore_evas_move(window->ecore_evas, x2, y2);
+       break;         
+     }   
+#endif   
+}
+
+/**
+ * @brief Sets the window's parent
+ * @param window a window
+ * @param parent a window
+ */
+void etk_window_parent_set(Etk_Window *window, Etk_Window *parent)
+{
+   if(!window || !parent)
+     return;
+   
+   window->parent = parent;
+}
+
 /**************************
  *
  * Etk specific functions
@@ -474,8 +531,10 @@
 
    window->delete_event = _etk_window_delete_event_handler;
 
-   window->ecore_evas = ecore_evas_software_x11_new(NULL, 0, 0, 0, 0, 0);
+   window->ecore_evas = ecore_evas_software_x11_new(0, 0, 0, 0, 0, 0);
    window->x_window = ecore_evas_software_x11_window_get(window->ecore_evas);
+   window->position = -1;
+   window->parent = NULL;
    
 /* TODO: free!! */
 #if HAVE_ECORE_X      
@@ -501,7 +560,7 @@
    /* TODO: font path */
    evas_font_path_append(ETK_TOPLEVEL_WIDGET(window)->evas, PACKAGE_DATA_DIR 
"/fonts/");
    ecore_evas_data_set(window->ecore_evas, "etk_window", window);
-   ecore_evas_callback_resize_set(window->ecore_evas, _etk_window_move_cb);
+   ecore_evas_callback_move_set(window->ecore_evas, _etk_window_move_cb);
    ecore_evas_callback_resize_set(window->ecore_evas, _etk_window_resize_cb);
    ecore_evas_callback_focus_in_set(window->ecore_evas, 
_etk_window_focus_in_cb);
    ecore_evas_callback_focus_out_set(window->ecore_evas, 
_etk_window_focus_out_cb);
@@ -535,6 +594,16 @@
    if (!(window = ETK_WINDOW(ecore_evas_data_get(ecore_evas, "etk_window"))))
       return;
    etk_signal_emit(_etk_window_signals[ETK_WINDOW_MOVE_SIGNAL], 
ETK_OBJECT(window), NULL);
+
+   switch(window->position)
+   {
+      case ETK_WINDOW_POSITION_CENTER:
+      etk_window_position_set(window, ETK_WINDOW_POSITION_CENTER);
+      break;
+      
+      default:
+      break;
+   }   
 }
 
 /* Called when the window is resized */
@@ -545,7 +614,7 @@
    if (!(window = ETK_WINDOW(ecore_evas_data_get(ecore_evas, "etk_window"))))
       return;
    etk_signal_emit(_etk_window_signals[ETK_WINDOW_RESIZE_SIGNAL], 
ETK_OBJECT(window), NULL);
-   etk_widget_redraw_queue(ETK_WIDGET(window));
+   etk_widget_redraw_queue(ETK_WIDGET(window));      
 }
 
 /* Called when the window is focused in */
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_window.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- etk_window.h        11 Feb 2006 10:27:14 -0000      1.5
+++ etk_window.h        27 Feb 2006 22:14:50 -0000      1.6
@@ -20,6 +20,16 @@
 /** @brief Check if the object is an Etk_Window */
 #define ETK_IS_WINDOW(obj)    (ETK_OBJECT_CHECK_TYPE((obj), ETK_WINDOW_TYPE))
 
+/**
+ * @enum Etk_Window_Position
+ * @brief The position of a window
+ */
+enum _Etk_Window_Position
+{
+   ETK_WINDOW_POSITION_CENTER,
+   ETK_WINDOW_POSITION_MOUSE     
+};
+
 struct _Etk_Window
 {
    /* private: */
@@ -28,7 +38,10 @@
 
    Ecore_Evas *ecore_evas;
    Ecore_X_Window x_window;
-
+   
+   Etk_Window_Position position;
+   Etk_Window *parent;
+   
    Etk_Bool (*delete_event)(Etk_Window *window);
 };
 
@@ -53,20 +66,23 @@
 void etk_window_focus(Etk_Window *window);
 void etk_window_unfocus(Etk_Window *window);
 
-void etk_window_decorated_set(Etk_Window *window, Etk_Bool decorated);
+void     etk_window_decorated_set(Etk_Window *window, Etk_Bool decorated);
 Etk_Bool etk_window_decorated_get(Etk_Window *window);
-void etk_window_shaped_set(Etk_Window *window, Etk_Bool shaped);
+void     etk_window_shaped_set(Etk_Window *window, Etk_Bool shaped);
 Etk_Bool etk_window_shaped_get(Etk_Window *window);
 
-void etk_window_skip_taskbar_hint_set(Etk_Window *window, Etk_Bool 
skip_taskbar_hint);
+void     etk_window_skip_taskbar_hint_set(Etk_Window *window, Etk_Bool 
skip_taskbar_hint);
 Etk_Bool etk_window_skip_taskbar_hint_get(Etk_Window *window);
-void etk_window_skip_pager_hint_set(Etk_Window *window, Etk_Bool 
skip_pager_hint);
+void     etk_window_skip_pager_hint_set(Etk_Window *window, Etk_Bool 
skip_pager_hint);
 Etk_Bool etk_window_skip_pager_hint_get(Etk_Window *window);
 
-void etk_window_dnd_aware_set(Etk_Window *window, Etk_Bool on);
+void     etk_window_dnd_aware_set(Etk_Window *window, Etk_Bool on);
 
 Etk_Bool etk_window_hide_on_delete(Etk_Object *window, void *data);
 
+void     etk_window_position_set(Etk_Window *window, Etk_Window_Position 
position);
+void     etk_window_parent_set(Etk_Window *window, Etk_Window *parent);
+  
 /** @} */
 
 #endif




-------------------------------------------------------
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