Enlightenment CVS committal

Author  : andrunko
Project : e17
Module  : libs/etk

Dir     : e17/libs/etk/src/lib


Modified Files:
        Etk.h Makefile.am etk_mdi_window.c etk_mdi_window.h 
        etk_types.h 
Added Files:
        etk_mdi_area.c etk_mdi_area.h 


Log Message:
Added Etk_Mdi_Area (container for Etk_Mdi_Window).

===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/Etk.h,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -3 -r1.49 -r1.50
--- Etk.h       19 Jul 2007 22:31:47 -0000      1.49
+++ Etk.h       20 Jul 2007 22:45:27 -0000      1.50
@@ -46,6 +46,7 @@
 #include "etk_iconbox.h"
 #include "etk_image.h"
 #include "etk_label.h"
+#include "etk_mdi_area.h"
 #include "etk_mdi_window.h"
 #include "etk_menu.h"
 #include "etk_menu_bar.h"
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/Makefile.am,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -3 -r1.54 -r1.55
--- Makefile.am 19 Jul 2007 22:31:47 -0000      1.54
+++ Makefile.am 20 Jul 2007 22:45:27 -0000      1.55
@@ -46,6 +46,7 @@
 etk_label.h \
 etk_main.h \
 etk_marshallers.h \
+etk_mdi_area.h \
 etk_mdi_window.h \
 etk_menu.h \
 etk_menu_bar.h \
@@ -120,6 +121,7 @@
 etk_label.c \
 etk_main.c \
 etk_marshallers.c \
+etk_mdi_area.c \
 etk_mdi_window.c \
 etk_menu.c \
 etk_menu_bar.c \
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_mdi_window.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- etk_mdi_window.c    19 Jul 2007 22:31:47 -0000      1.1
+++ etk_mdi_window.c    20 Jul 2007 22:45:27 -0000      1.2
@@ -4,16 +4,14 @@
 #endif
 
 #include "etk_mdi_window.h"
-#include "etk_config.h"
-#include "etk_engine.h"
+
+#include "etk_utils.h"
 #include "etk_signal.h"
 #include "etk_signal_callback.h"
-#include "etk_utils.h"
+#include "etk_toplevel.h"
 
-#include <Ecore_File.h>
 #include <Edje.h>
 
-#include <limits.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -22,12 +20,9 @@
  * @{
  */
 
-#define ETK_MDI_WINDOW_DATA(data) ((Etk_Mdi_Window_Data*)data)
-
 enum Etk_Widget_Signal_Id
 {
    ETK_MDI_WINDOW_MOVED_SIGNAL,
-   ETK_MDI_WINDOW_RESIZED_SIGNAL,
    ETK_MDI_WINDOW_DELETE_EVENT_SIGNAL,
    ETK_MDI_WINDOW_NUM_SIGNALS
 };
@@ -35,43 +30,14 @@
 enum Etk_Mdi_Window_Property_Id
 {
    ETK_MDI_WINDOW_TITLE_PROPERTY,
-   ETK_MDI_WINDOW_MAXIMIZED_PROPERTY,
-   ETK_MDI_WINDOW_DECORATED_PROPERTY
-};
-
-/* Engine specific data for Etk_Mdi_Window */
-struct _Etk_Mdi_Window_Data
-{
-   Etk_Size size;
-   Etk_Size min_size;
-   Evas_Object *border;
-   Etk_Position border_position;
-   Etk_Bool borderless;
-   Etk_Bool visible;
-   Etk_Bool maximized;
-   Etk_Bool is_dragging;
-   int drag_offset_x;
-   int drag_offset_y;
-   Etk_Bool is_resizing;
-   int resize_offset_x;
-   int resize_offset_y;
-   char *title;
+   ETK_MDI_WINDOW_MAXIMIZED_PROPERTY
 };
 
 static void _etk_mdi_window_constructor(Etk_Mdi_Window *mdi_window);
 static void _etk_mdi_window_destructor(Etk_Mdi_Window *mdi_window);
 static void _etk_mdi_window_property_set(Etk_Object *object, int property_id, 
Etk_Property_Value *value);
 static void _etk_mdi_window_property_get(Etk_Object *object, int property_id, 
Etk_Property_Value *value);
-static void _etk_mdi_window_shown_cb(Etk_Object *object, void *data);
-static void _etk_mdi_window_hidden_cb(Etk_Object *object, void *data);
-static void _etk_mdi_window_size_requested_cb(Etk_Object *object, Etk_Size 
*requested_size, void *data);
-static void _etk_mdi_window_evas_position_get(Etk_Toplevel *toplevel, int *x, 
int *y);
-static void _etk_mdi_window_screen_position_get(Etk_Toplevel *toplevel, int 
*x, int *y);
-static void _etk_mdi_window_size_get(Etk_Toplevel *toplevel, int *w, int *h);
-static void _etk_mdi_window_disable(Etk_Mdi_Window *mdi_window);
-static void _etk_mdi_window_enable(Etk_Mdi_Window *mdi_window);
 static void _etk_mdi_window_realized_cb(Etk_Object *object, void *data);
-static void _etk_mdi_window_unrealized_cb(Etk_Object *object, void *data);
 static void _etk_mdi_window_titlebar_mouse_down_cb(void *data, Evas *e, 
Evas_Object *obj, void *event_info);
 static void _etk_mdi_window_titlebar_mouse_up_cb(void *data, Evas *e, 
Evas_Object *obj, void *event_info);
 static void _etk_mdi_window_titlebar_mouse_move_cb(void *data, Evas *e, 
Evas_Object *obj, void *event_info);
@@ -80,11 +46,9 @@
 static void _etk_mdi_window_resize_mouse_down_cb(void *data, Evas *e, 
Evas_Object *obj, void *event_info);
 static void _etk_mdi_window_resize_mouse_up_cb(void *data, Evas *e, 
Evas_Object *obj, void *event_info);
 static void _etk_mdi_window_resize_mouse_move_cb(void *data, Evas *e, 
Evas_Object *obj, void *event_info);
-static void _etk_mdi_window_maximize_mouse_up_cb(void *data, Evas_Object *obj, 
const char *emission, const char *source);
-static void _etk_mdi_window_close_mouse_up_cb(void *data, Evas_Object *obj, 
const char *emission, const char *source);
+static void _etk_mdi_window_maximize_mouse_clicked_cb(void *data, Evas_Object 
*obj, const char *emission, const char *source);
+static void _etk_mdi_window_close_mouse_clicked_cb(void *data, Evas_Object 
*obj, const char *emission, const char *source);
 static Etk_Bool _etk_mdi_window_delete_event_handler(Etk_Mdi_Window 
*mdi_window);
-static char *_etk_mdi_window_wm_theme_path_get(void);
-static char *_etk_mdi_window_wm_theme_find(const char *theme_name);
 
 static Etk_Signal *_etk_mdi_window_signals[ETK_MDI_WINDOW_NUM_SIGNALS];
 
@@ -105,16 +69,18 @@
 
    if (!mdi_window_type)
    {
-      mdi_window_type = etk_type_new("Etk_Mdi_Window", ETK_TOPLEVEL_TYPE, 
sizeof(Etk_Mdi_Window), ETK_CONSTRUCTOR(_etk_mdi_window_constructor), 
ETK_DESTRUCTOR(_etk_mdi_window_destructor));
+      mdi_window_type = etk_type_new("Etk_Mdi_Window", ETK_BIN_TYPE, 
sizeof(Etk_Mdi_Window),
+         ETK_CONSTRUCTOR(_etk_mdi_window_constructor), 
ETK_DESTRUCTOR(_etk_mdi_window_destructor));
 
-      /* FIXME proper emit signal move, resize */
-      _etk_mdi_window_signals[ETK_MDI_WINDOW_MOVED_SIGNAL] = 
etk_signal_new("moved", mdi_window_type, -1, etk_marshaller_VOID__VOID, NULL, 
NULL);
-      _etk_mdi_window_signals[ETK_MDI_WINDOW_RESIZED_SIGNAL] = 
etk_signal_new("resized", mdi_window_type, -1, etk_marshaller_VOID__VOID, NULL, 
NULL);
-      _etk_mdi_window_signals[ETK_MDI_WINDOW_DELETE_EVENT_SIGNAL] = 
etk_signal_new("delete-event", mdi_window_type, 
ETK_MEMBER_OFFSET(Etk_Mdi_Window, delete_event), etk_marshaller_BOOL__VOID, 
etk_accumulator_bool_or, NULL);
-
-      etk_type_property_add(mdi_window_type, "title", 
ETK_MDI_WINDOW_TITLE_PROPERTY, ETK_PROPERTY_STRING, 
ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_string(NULL));
-      etk_type_property_add(mdi_window_type, "maximized", 
ETK_MDI_WINDOW_MAXIMIZED_PROPERTY, ETK_PROPERTY_BOOL, 
ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_bool(ETK_FALSE));
-      etk_type_property_add(mdi_window_type, "decorated", 
ETK_MDI_WINDOW_DECORATED_PROPERTY, ETK_PROPERTY_BOOL, 
ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_bool(ETK_FALSE));
+      _etk_mdi_window_signals[ETK_MDI_WINDOW_MOVED_SIGNAL] = 
etk_signal_new("moved", mdi_window_type,
+         -1, etk_marshaller_VOID__VOID, NULL, NULL);
+      _etk_mdi_window_signals[ETK_MDI_WINDOW_DELETE_EVENT_SIGNAL] = 
etk_signal_new("delete-event", mdi_window_type,
+         ETK_MEMBER_OFFSET(Etk_Mdi_Window, delete_event), 
etk_marshaller_BOOL__VOID, etk_accumulator_bool_or, NULL);
+
+      etk_type_property_add(mdi_window_type, "title", 
ETK_MDI_WINDOW_TITLE_PROPERTY,
+         ETK_PROPERTY_STRING, ETK_PROPERTY_READABLE_WRITABLE, 
etk_property_value_string(NULL));
+      etk_type_property_add(mdi_window_type, "maximized", 
ETK_MDI_WINDOW_MAXIMIZED_PROPERTY,
+         ETK_PROPERTY_BOOL, ETK_PROPERTY_READABLE_WRITABLE, 
etk_property_value_bool(ETK_FALSE));
 
       mdi_window_type->property_set = _etk_mdi_window_property_set;
       mdi_window_type->property_get = _etk_mdi_window_property_get;
@@ -127,15 +93,9 @@
  * @brief Creates a new mdi_window
  * @return Returns the new mdi_window widget
  */
-Etk_Widget *etk_mdi_window_new(Evas *evas)
+Etk_Widget *etk_mdi_window_new(void)
 {
-   Etk_Widget *mdi_window;
-
-   mdi_window = etk_widget_new(ETK_MDI_WINDOW_TYPE, "theme-group", "window", 
NULL);
-   ETK_TOPLEVEL(mdi_window)->evas = evas;
-   etk_object_notify(ETK_OBJECT(mdi_window), "evas");
-
-   return mdi_window;
+   return etk_widget_new(ETK_MDI_WINDOW_TYPE, "theme-group", "mdi_window", 
NULL);
 }
 
 /**
@@ -150,12 +110,15 @@
 
    
etk_signal_emit(_etk_mdi_window_signals[ETK_MDI_WINDOW_DELETE_EVENT_SIGNAL], 
ETK_OBJECT(mdi_window), &result);
    if (!result)
+   {
+      etk_widget_parent_set(ETK_WIDGET(mdi_window), NULL);
       etk_object_destroy(ETK_OBJECT(mdi_window));
+   }
 }
 
 /**
  * @brief Sets the title of the mdi_window
- * @param mdi_window the mdi_window
+ * @param mdi_window a mdi_window
  * @param title the title to set
  */
 void etk_mdi_window_title_set(Etk_Mdi_Window *mdi_window, const char *title)
@@ -163,21 +126,21 @@
    if (!mdi_window)
       return;
 
-   if (mdi_window->data->title != title)
+   if (title != mdi_window->title)
    {
-      free(mdi_window->data->title);
-      mdi_window->data->title = strdup(title);
+      free(mdi_window->title);
+      mdi_window->title = title ? strdup(title) : NULL;
+   }
 
-      if (mdi_window->data->border)
-         edje_object_part_text_set(mdi_window->data->border, "etk.text.title", 
title ? title : "");
+   etk_widget_theme_part_text_set(ETK_WIDGET(mdi_window), "etk.text.title", 
mdi_window->title ? mdi_window->title : "");
 
+   if (title != mdi_window->title)
       etk_object_notify(ETK_OBJECT(mdi_window), "title");
-   }
 }
 
 /**
  * @brief Gets the title of the mdi_window
- * @param mdi_window the mdi_window
+ * @param mdi_window a mdi_window
  * @return Returns the title of the mdi_window
  */
 const char *etk_mdi_window_title_get(Etk_Mdi_Window *mdi_window)
@@ -185,117 +148,27 @@
    if (!mdi_window)
       return NULL;
 
-   return mdi_window->data->title;
+   return mdi_window->title;
 }
 
-/**
- * @brief Moves the mdi_window to the position (x, y)
- * @param mdi_window a mdi_window
- * @param x the x position
- * @param y the y position
- */
 void etk_mdi_window_move(Etk_Mdi_Window *mdi_window, int x, int y)
 {
    if (!mdi_window)
       return;
 
-   mdi_window->data->border_position.x = x;
-   mdi_window->data->border_position.y = y;
-   if (mdi_window->data->border && !mdi_window->data->maximized)
-      evas_object_move(mdi_window->data->border, x, y);
-}
-
-/**
- * @brief Resizes the mdi_window
- * @param mdi_window a mdi_window
- * @param w the new width of the mdi_window
- * @param h the new height of the mdi_window
- */
-void etk_mdi_window_resize(Etk_Mdi_Window *mdi_window, int w, int h)
-{
-   if (!mdi_window)
-      return;
-
-   mdi_window->data->size.w = ETK_MAX(mdi_window->data->min_size.w, w);
-   mdi_window->data->size.h = ETK_MAX(mdi_window->data->min_size.h, h);
-   if (mdi_window->data->border && ETK_WIDGET(mdi_window)->smart_object && 
!mdi_window->data->maximized)
-   {
-      int border_w, border_h;
-
-      edje_extern_object_min_size_set(ETK_WIDGET(mdi_window)->smart_object, 
mdi_window->data->size.w, mdi_window->data->size.h);
-      edje_object_part_swallow(mdi_window->data->border, 
"etk.swallow.content", ETK_WIDGET(mdi_window)->smart_object);
-      edje_object_size_min_calc(mdi_window->data->border, &border_w, 
&border_h);
-      evas_object_resize(mdi_window->data->border, border_w, border_h);
-   }
-}
-
-/**
- * @brief Gets the geometry of the mdi_window
- * @param mdi_window a mdi_window
- * @param x the location where to set the x position the mdi_window
- * @param y the location where to set the y position the mdi_window
- * @param w the location where to set the width of the mdi_window
- * @param h the location where to set the height of the mdi_window
- */
-void etk_mdi_window_geometry_get(Etk_Mdi_Window *mdi_window, int *x, int *y, 
int *w, int *h)
-{
-   if (!mdi_window)
-      return;
-   etk_toplevel_screen_position_get(ETK_TOPLEVEL(mdi_window), x, y);
-   etk_toplevel_size_get(ETK_TOPLEVEL(mdi_window), w, h);
-}
-
-/**
- * @brief Makes a mdi_window modal for another mdi_window
- * @param window_to_modal the mdi_window to make modal
- * @param mdi_window the mdi_window on which @a window_to_modal will modal'ed 
on, or NULL to disable the modal state
- */
-void etk_mdi_window_modal_for_window(Etk_Mdi_Window *window_to_modal, 
Etk_Mdi_Window *mdi_window)
-{
-   if (!window_to_modal)
-      return;
-
-   if (mdi_window)
-   {
-      /* TODO: grab the input */
-      etk_signal_connect_swapped("shown", ETK_OBJECT(window_to_modal), 
ETK_CALLBACK(_etk_mdi_window_disable), mdi_window);
-      etk_signal_connect_swapped("hidden", ETK_OBJECT(window_to_modal), 
ETK_CALLBACK(_etk_mdi_window_enable), mdi_window);
-      etk_signal_connect_swapped("delete-event", ETK_OBJECT(window_to_modal), 
ETK_CALLBACK(_etk_mdi_window_enable), mdi_window);
-   }
-   else
-   {
-      etk_signal_disconnect("shown", ETK_OBJECT(window_to_modal), 
ETK_CALLBACK(_etk_mdi_window_disable));
-      etk_signal_disconnect("hidden", ETK_OBJECT(window_to_modal), 
ETK_CALLBACK(_etk_mdi_window_enable));
-      etk_signal_disconnect("delete-event", ETK_OBJECT(window_to_modal), 
ETK_CALLBACK(_etk_mdi_window_enable));
-   }
-}
-
-/**
- * @brief Raises the mdi_window.
- * @param mdi_window a mdi_window
- */
-void etk_mdi_window_raise(Etk_Mdi_Window *mdi_window)
-{
-   if (!mdi_window)
-      return;
+   mdi_window->position.x = x;
+   mdi_window->position.y = y;
 
-   if (mdi_window->data->border)
-   {
-      evas_object_raise(mdi_window->data->border);
-   }
+   etk_signal_emit(_etk_mdi_window_signals[ETK_MDI_WINDOW_MOVED_SIGNAL], 
ETK_OBJECT(mdi_window), NULL);
 }
 
-/**
- * @brief Lowers the mdi_window.
- * @param mdi_window a mdi_window
- */
-void etk_mdi_window_lower(Etk_Mdi_Window *mdi_window)
+void etk_mdi_window_position_get(Etk_Mdi_Window *mdi_window, int *x, int *y)
 {
    if (!mdi_window)
       return;
 
-   if (mdi_window->data->border)
-      evas_object_lower(mdi_window->data->border);
+   if (x) *x = mdi_window->position.x;
+   if (y) *y = mdi_window->position.y;
 }
 
 /**
@@ -308,25 +181,9 @@
    if (!mdi_window)
       return;
 
-   if (mdi_window->data->maximized != maximized)
+   if (mdi_window->maximized != maximized)
    {
-      mdi_window->data->maximized = maximized;
-      if (mdi_window->data->border)
-      {
-         if (maximized)
-         {
-            int w, h;
-            evas_output_size_get(ETK_TOPLEVEL(mdi_window)->evas, &w, &h);
-            evas_object_move(mdi_window->data->border, 0, 0);
-            evas_object_resize(mdi_window->data->border, w, h);
-         }
-         else
-         {
-            evas_object_move(mdi_window->data->border, 
mdi_window->data->border_position.x, mdi_window->data->border_position.y);
-            etk_mdi_window_resize(mdi_window, mdi_window->data->size.w, 
mdi_window->data->size.h);
-         }
-      }
-
+      mdi_window->maximized = maximized;
       etk_object_notify(ETK_OBJECT(mdi_window), "maximized");
    }
 }
@@ -341,45 +198,8 @@
    if (!mdi_window)
       return ETK_FALSE;
 
-   return mdi_window->data->maximized;
-}
-
-/**
- * @brief Sets wheter the mdi_window is decorated
- * @param mdi_window a mdi_window
- * @param decorated if @a decorated is ETK_FALSE, the border of the mdi_window 
will be hidden
- */
-void etk_mdi_window_decorated_set(Etk_Mdi_Window *mdi_window, Etk_Bool 
decorated)
-{
-   if (!mdi_window)
-      return;
-
-   if (mdi_window->data->borderless == !decorated)
-      return;
-
-   mdi_window->data->borderless = !decorated;
-   if (mdi_window->data->border)
-   {
-      /* Recreate the border */
-      _etk_mdi_window_unrealized_cb(ETK_OBJECT(mdi_window), NULL);
-      _etk_mdi_window_realized_cb(ETK_OBJECT(mdi_window), NULL);
-   }
-   etk_object_notify(ETK_OBJECT(mdi_window), "decorated");
-}
-
-/**
- * @brief Gets whether the mdi_window is decorated (i.e. whether the border of 
the mdi_window is shown)
- * @param mdi_window a mdi_window
- * @return Returns ETK_TRUE if the mdi_window is decorated
- */
-Etk_Bool etk_mdi_window_decorated_get(Etk_Mdi_Window *mdi_window)
-{
-   if (!mdi_window)
-      return ETK_TRUE;
-
-   return !mdi_window->data->borderless;
+   return mdi_window->maximized;
 }
-
 /**
  * @brief A utility function to use as a callback for the "delete-event" 
signal.
  * It will hide the mdi_window and return ETK_TRUE to prevent the program from 
quitting
@@ -389,6 +209,9 @@
  */
 Etk_Bool etk_mdi_window_hide_on_delete(Etk_Object *mdi_window, void *data)
 {
+   if (!mdi_window)
+      return ETK_TRUE;
+
    etk_widget_hide(ETK_WIDGET(mdi_window));
    return ETK_TRUE;
 }
@@ -399,40 +222,22 @@
  *
  **************************/
 
-/* Initializes the members and build the mdi_window */
+/* Initializes the members */
 static void _etk_mdi_window_constructor(Etk_Mdi_Window *mdi_window)
 {
    if (!mdi_window)
       return;
 
-   /* TODO should we use the theme itself, or have a separate wm theme? */
-   mdi_window->wm_theme_file = _etk_mdi_window_wm_theme_path_get();
-   mdi_window->wait_size_request = ETK_TRUE;
-   mdi_window->data = malloc(sizeof(Etk_Mdi_Window_Data));
-   mdi_window->data->size.w = 32;
-   mdi_window->data->size.h = 32;
-   mdi_window->data->min_size.w = 0;
-   mdi_window->data->min_size.h = 0;
-   mdi_window->data->border = NULL;
-   mdi_window->data->border_position.x = 0;
-   mdi_window->data->border_position.y = 0;
-   mdi_window->data->borderless = ETK_FALSE;
-   mdi_window->data->visible = ETK_FALSE;
-   mdi_window->data->maximized = ETK_FALSE;
-   mdi_window->data->is_dragging = ETK_FALSE;
-   mdi_window->data->is_resizing = ETK_FALSE;
-   mdi_window->data->title = NULL;
+   mdi_window->position.x = 0;
+   mdi_window->position.y = 0;
+   mdi_window->title = NULL;
+   mdi_window->maximized = ETK_FALSE;
+   mdi_window->dragging = ETK_FALSE;
+   mdi_window->resizing = ETK_FALSE;
 
    mdi_window->delete_event = _etk_mdi_window_delete_event_handler;
-   ETK_TOPLEVEL(mdi_window)->evas_position_get = 
_etk_mdi_window_evas_position_get;
-   ETK_TOPLEVEL(mdi_window)->screen_position_get = 
_etk_mdi_window_screen_position_get;
-   ETK_TOPLEVEL(mdi_window)->size_get = _etk_mdi_window_size_get;
 
-   etk_signal_connect("size-requested", ETK_OBJECT(mdi_window), 
ETK_CALLBACK(_etk_mdi_window_size_requested_cb), NULL);
    etk_signal_connect("realized", ETK_OBJECT(mdi_window), 
ETK_CALLBACK(_etk_mdi_window_realized_cb), NULL);
-   etk_signal_connect("unrealized", ETK_OBJECT(mdi_window), 
ETK_CALLBACK(_etk_mdi_window_unrealized_cb), NULL);
-   etk_signal_connect("shown", ETK_OBJECT(mdi_window), 
ETK_CALLBACK(_etk_mdi_window_shown_cb), NULL);
-   etk_signal_connect("hidden", ETK_OBJECT(mdi_window), 
ETK_CALLBACK(_etk_mdi_window_hidden_cb), NULL);
 }
 
 /* Destroys the mdi_window */
@@ -441,9 +246,7 @@
    if (!mdi_window)
       return;
 
-   free(mdi_window->wm_theme_file);
-   free(mdi_window->data->title);
-   free(mdi_window->data);
+   free(mdi_window->title);
 }
 
 /* Sets the property whose id is "property_id" to the value "value" */
@@ -462,9 +265,6 @@
       case ETK_MDI_WINDOW_MAXIMIZED_PROPERTY:
          etk_mdi_window_maximized_set(mdi_window, 
etk_property_value_bool_get(value));
          break;
-      case ETK_MDI_WINDOW_DECORATED_PROPERTY:
-         etk_mdi_window_decorated_set(mdi_window, 
etk_property_value_bool_get(value));
-         break;
       default:
          break;
    }
@@ -481,14 +281,11 @@
    switch (property_id)
    {
       case ETK_MDI_WINDOW_TITLE_PROPERTY:
-         etk_property_value_string_set(value, 
etk_mdi_window_title_get(mdi_window));
+         etk_property_value_string_set(value, mdi_window->title);
          break;
       case ETK_MDI_WINDOW_MAXIMIZED_PROPERTY:
          etk_property_value_bool_set(value, 
etk_mdi_window_maximized_get(mdi_window));
          break;
-      case ETK_MDI_WINDOW_DECORATED_PROPERTY:
-         etk_property_value_bool_set(value, 
etk_mdi_window_decorated_get(mdi_window));
-         break;
       default:
          break;
    }
@@ -500,158 +297,19 @@
  *
  **************************/
 
-/* Called when the mdi_window is shown */
-static void _etk_mdi_window_shown_cb(Etk_Object *object, void *data)
-{
-   Etk_Mdi_Window *mdi_window;
-
-   if (!(mdi_window = ETK_MDI_WINDOW(object)) || mdi_window->wait_size_request)
-      return;
-
-   mdi_window->data->visible = ETK_TRUE;
-   if (mdi_window->data->border)
-      evas_object_show(mdi_window->data->border);
-}
-
-/* Called when the mdi_window is hidden */
-static void _etk_mdi_window_hidden_cb(Etk_Object *object, void *data)
-{
-   Etk_Mdi_Window *mdi_window;
-
-   if (!(mdi_window = ETK_MDI_WINDOW(object)) || mdi_window->wait_size_request)
-      return;
-
-   mdi_window->data->visible = ETK_FALSE;
-   if (mdi_window->data->border)
-      evas_object_hide(mdi_window->data->border);
-}
-
-/* Called when the "size-requested" signal is emitted */
-static void _etk_mdi_window_size_requested_cb(Etk_Object *object, Etk_Size 
*requested_size, void *data)
-{
-   Etk_Mdi_Window *mdi_window;
-
-   if (!(mdi_window = ETK_MDI_WINDOW(object)) || !requested_size)
-      return;
-
-   if (requested_size->w >= 0 && requested_size->h >= 0)
-   {
-      mdi_window->data->min_size.w = requested_size->w;
-      mdi_window->data->min_size.h = requested_size->h;
-      if (mdi_window->data->size.w < requested_size->w || 
mdi_window->data->size.h < requested_size->h)
-         etk_mdi_window_resize(mdi_window, requested_size->w, 
requested_size->h);
-
-      if (mdi_window->wait_size_request)
-      {
-         mdi_window->wait_size_request = ETK_FALSE;
-         if (etk_widget_is_visible(ETK_WIDGET(mdi_window)))
-         {
-            mdi_window->data->visible = ETK_TRUE;
-            if (mdi_window->data->border)
-               evas_object_show(mdi_window->data->border);
-         }
-      }
-   }
-}
-
-/* Gets the evas position of the mdi_window */
-static void _etk_mdi_window_evas_position_get(Etk_Toplevel *toplevel, int *x, 
int *y)
-{
-   if (ETK_WIDGET(toplevel)->smart_object)
-   {
-      evas_object_geometry_get(ETK_WIDGET(toplevel)->smart_object, x, y, NULL, 
NULL);
-   }
-   else
-   {
-      if (x) *x = 0;
-      if (y) *y = 0;
-   }
-}
-
-/* Gets the screen position of the mdi_window */
-static void _etk_mdi_window_screen_position_get(Etk_Toplevel *toplevel, int 
*x, int *y)
-{
-   if (ETK_WIDGET(toplevel)->smart_object)
-   {
-      evas_object_geometry_get(ETK_WIDGET(toplevel)->smart_object, x, y, NULL, 
NULL);
-   }
-   else
-   {
-      if (x) *x = 0;
-      if (y) *y = 0;
-   }
-}
-
-/* Gets the size of the mdi_window */
-static void _etk_mdi_window_size_get(Etk_Toplevel *toplevel, int *w, int *h)
-{
-   Etk_Mdi_Window *mdi_window = ETK_MDI_WINDOW(toplevel);
-
-   if (mdi_window->data->maximized && ETK_WIDGET(mdi_window)->smart_object)
-      evas_object_geometry_get(ETK_WIDGET(mdi_window)->smart_object, NULL, 
NULL, w, h);
-   else
-   {
-      if (w) *w = mdi_window->data->size.w;
-      if (h) *h = mdi_window->data->size.h;
-   }
-}
-
-/* Disable a mdi_window */
-static void _etk_mdi_window_disable(Etk_Mdi_Window *mdi_window)
-{
-   if (!mdi_window)
-      return;
-
-   etk_widget_disabled_set(ETK_WIDGET(mdi_window), ETK_TRUE);
-}
-
-/* Enable a mdi_window */
-static void _etk_mdi_window_enable(Etk_Mdi_Window *mdi_window)
-{
-   if (!mdi_window)
-      return;
-
-   etk_widget_disabled_set(ETK_WIDGET(mdi_window), ETK_FALSE);
-}
-
-/* Called when the mdi_window is realized: it creates the border */
+/* Called when the mdi_window is realized */
 static void _etk_mdi_window_realized_cb(Etk_Object *object, void *data)
 {
    Etk_Mdi_Window *mdi_window;
-   int border_w, border_h;
+   Evas_Object *theme_object;
    Evas_Object *o;
 
-   if (!(mdi_window = ETK_MDI_WINDOW(object)))
+   if (!(mdi_window = ETK_MDI_WINDOW(object)) || !(theme_object = 
ETK_WIDGET(mdi_window)->theme_object))
       return;
 
-   mdi_window->data->border = edje_object_add(ETK_TOPLEVEL(mdi_window)->evas);
-   if (mdi_window->data->borderless)
-      edje_object_file_set(mdi_window->data->border, 
mdi_window->wm_theme_file, "etk/wm_borderless");
-   else
-      edje_object_file_set(mdi_window->data->border, 
mdi_window->wm_theme_file, "etk/wm_border");
-   edje_object_part_text_set(mdi_window->data->border, "etk.text.title", 
mdi_window->data->title ? mdi_window->data->title : "");
-
-   edje_extern_object_min_size_set(ETK_WIDGET(mdi_window)->smart_object, 
mdi_window->data->size.w, mdi_window->data->size.h);
-   edje_object_part_swallow(mdi_window->data->border, "etk.swallow.content", 
ETK_WIDGET(mdi_window)->smart_object);
-   edje_object_size_min_calc(mdi_window->data->border, &border_w, &border_h);
-
-   if (mdi_window->data->maximized)
-   {
-      int w, h;
-      evas_output_size_get(ETK_TOPLEVEL(mdi_window)->evas, &w, &h);
-      evas_object_move(mdi_window->data->border, 0, 0);
-      evas_object_resize(mdi_window->data->border, w, h);
-   }
-   else
-   {
-      evas_object_move(mdi_window->data->border, 
mdi_window->data->border_position.x, mdi_window->data->border_position.y);
-      evas_object_resize(mdi_window->data->border, border_w, border_h);
-   }
-
-   if (mdi_window->data->visible)
-      evas_object_show(mdi_window->data->border);
+   etk_mdi_window_title_set(mdi_window, mdi_window->title);
 
-   o = edje_object_part_object_get(mdi_window->data->border, 
"etk.event.titlebar");
+   o = edje_object_part_object_get(theme_object, "etk.event.titlebar");
    if (o)
    {
       evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, 
_etk_mdi_window_titlebar_mouse_down_cb, mdi_window);
@@ -659,7 +317,7 @@
       evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, 
_etk_mdi_window_titlebar_mouse_move_cb, mdi_window);
    }
 
-   o = edje_object_part_object_get(mdi_window->data->border, 
"etk.event.resize");
+   o = edje_object_part_object_get(theme_object, "etk.event.resize");
    if (o)
    {
       evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_IN, 
_etk_mdi_window_resize_mouse_in_cb, mdi_window);
@@ -669,25 +327,10 @@
       evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, 
_etk_mdi_window_resize_mouse_move_cb, mdi_window);
    }
 
-   edje_object_signal_callback_add(mdi_window->data->border, 
"mouse,clicked,1*", "etk.event.maximize",
-      _etk_mdi_window_maximize_mouse_up_cb, mdi_window);
-   edje_object_signal_callback_add(mdi_window->data->border, 
"mouse,clicked,1*", "etk.event.close",
-      _etk_mdi_window_close_mouse_up_cb, mdi_window);
-}
-
-/* Called when the mdi_window is unrealized: it destroys the border */
-static void _etk_mdi_window_unrealized_cb(Etk_Object *object, void *data)
-{
-   Etk_Mdi_Window *mdi_window;
-
-   if (!(mdi_window = ETK_MDI_WINDOW(object)))
-      return;
-
-   if (mdi_window->data->border)
-   {
-      evas_object_del(mdi_window->data->border);
-      mdi_window->data->border = NULL;
-   }
+   edje_object_signal_callback_add(theme_object, "mouse,clicked,1*", 
"etk.event.maximize",
+      _etk_mdi_window_maximize_mouse_clicked_cb, mdi_window);
+   edje_object_signal_callback_add(theme_object, "mouse,clicked,1*", 
"etk.event.close",
+      _etk_mdi_window_close_mouse_clicked_cb, mdi_window);
 }
 
 /* Called when the titlebar of the mdi_window is pressed */
@@ -701,14 +344,14 @@
 
    ev = event_info;
 
-   if (!mdi_window->data->maximized)
+   if (!mdi_window->maximized)
    {
-      mdi_window->data->drag_offset_x = ev->canvas.x - 
mdi_window->data->border_position.x;
-      mdi_window->data->drag_offset_y = ev->canvas.y - 
mdi_window->data->border_position.y;
-      mdi_window->data->is_dragging = ETK_TRUE;
+      mdi_window->drag_offset_x = ev->canvas.x - mdi_window->position.x;
+      mdi_window->drag_offset_y = ev->canvas.y - mdi_window->position.y;
+      mdi_window->dragging = ETK_TRUE;
    }
 
-   etk_mdi_window_raise(mdi_window);
+   etk_widget_raise(ETK_WIDGET(mdi_window));
 }
 
 /* Called when the titlebar of the mdi_window is released */
@@ -719,7 +362,7 @@
    if (!(mdi_window = ETK_MDI_WINDOW(data)))
       return;
 
-   mdi_window->data->is_dragging = ETK_FALSE;
+   mdi_window->dragging = ETK_FALSE;
 }
 
 /* Called when the titlebar of the mdi_window is moved */
@@ -728,17 +371,14 @@
    Etk_Mdi_Window *mdi_window;
    Evas_Event_Mouse_Move *ev;
 
-   if (!(mdi_window = ETK_MDI_WINDOW(data)))
+   if (!(mdi_window = ETK_MDI_WINDOW(data)) || !(mdi_window->dragging))
       return;
 
    ev = event_info;
 
-   if (mdi_window->data->is_dragging)
-   {
-      etk_mdi_window_move(mdi_window,
-                          ev->cur.canvas.x - mdi_window->data->drag_offset_x,
-                          ev->cur.canvas.y - mdi_window->data->drag_offset_y);
-   }
+   etk_mdi_window_move(mdi_window,
+      ev->cur.canvas.x - mdi_window->drag_offset_x,
+      ev->cur.canvas.y - mdi_window->drag_offset_y);
 }
 
 /* Called when the mouse pointer enters the resize-rect of the mdi_window's 
border */
@@ -746,10 +386,10 @@
 {
    Etk_Mdi_Window *mdi_window;
 
-   if (!(mdi_window = ETK_MDI_WINDOW(data)))
+   if (!(mdi_window = ETK_MDI_WINDOW(data)) || mdi_window->maximized)
       return;
 
-   /* TODO change mouse pointer to ETK_POINTER_RESIZE_BR */
+   
etk_toplevel_pointer_push(etk_widget_toplevel_parent_get(ETK_WIDGET(mdi_window)),
 ETK_POINTER_RESIZE_BR);
 }
 
 /* Called when the mouse pointer leaves the resize-rect of the mdi_window's 
border */
@@ -760,7 +400,7 @@
    if (!(mdi_window = ETK_MDI_WINDOW(data)))
       return;
 
-   /* TODO restore mouse pointer */
+   
etk_toplevel_pointer_pop(etk_widget_toplevel_parent_get(ETK_WIDGET(mdi_window)),
 ETK_POINTER_RESIZE_BR);
 }
 
 /* Called when the mouse presses the resize-rect of the mdi_window's border */
@@ -768,18 +408,16 @@
 {
    Etk_Mdi_Window *mdi_window;
    Evas_Event_Mouse_Down *ev;
+   int w, h;
 
-   if (!(mdi_window = ETK_MDI_WINDOW(data)))
+   if (!(mdi_window = ETK_MDI_WINDOW(data)) || mdi_window->maximized)
       return;
 
    ev = event_info;
-
-   if (!mdi_window->data->maximized)
-   {
-      mdi_window->data->is_resizing = ETK_TRUE;
-      mdi_window->data->resize_offset_x = ev->canvas.x - 
mdi_window->data->size.w;
-      mdi_window->data->resize_offset_y = ev->canvas.y - 
mdi_window->data->size.h;
-   }
+   etk_widget_geometry_get(ETK_WIDGET(mdi_window), NULL, NULL, &w, &h);
+   mdi_window->resizing = ETK_TRUE;
+   mdi_window->resize_offset_x = ev->canvas.x - w;
+   mdi_window->resize_offset_y = ev->canvas.y - h;
 }
 
 /* Called when the mouse releases the resize-rect of the mdi_window's border */
@@ -790,7 +428,7 @@
    if (!(mdi_window = ETK_MDI_WINDOW(data)))
       return;
 
-   mdi_window->data->is_resizing = ETK_FALSE;
+   mdi_window->resizing = ETK_FALSE;
 }
 
 static void _etk_mdi_window_resize_mouse_move_cb(void *data, Evas *e, 
Evas_Object *obj, void *event_info)
@@ -798,21 +436,17 @@
    Etk_Mdi_Window *mdi_window;
    Evas_Event_Mouse_Move *ev;
 
-   if (!(mdi_window = ETK_MDI_WINDOW(data)))
+   if (!(mdi_window = ETK_MDI_WINDOW(data)) || !(mdi_window->resizing))
       return;
 
    ev = event_info;
-
-   if (mdi_window->data->is_resizing)
-   {
-      etk_mdi_window_resize(mdi_window,
-                            ev->cur.canvas.x - 
mdi_window->data->resize_offset_x,
-                            ev->cur.canvas.y - 
mdi_window->data->resize_offset_y);
-   }
+   etk_widget_size_request_set(ETK_WIDGET(mdi_window),
+      ev->cur.canvas.x - mdi_window->resize_offset_x,
+      ev->cur.canvas.y - mdi_window->resize_offset_y);
 }
 
 /* Called when the mouse releases the maximize button */
-static void _etk_mdi_window_maximize_mouse_up_cb(void *data, Evas_Object *obj, 
const char *emission, const char *source)
+static void _etk_mdi_window_maximize_mouse_clicked_cb(void *data, Evas_Object 
*obj, const char *emission, const char *source)
 {
    Etk_Mdi_Window *mdi_window;
 
@@ -820,11 +454,11 @@
       return;
 
    etk_mdi_window_maximized_set(mdi_window, 
!etk_mdi_window_maximized_get(mdi_window));
-   etk_mdi_window_raise(mdi_window);
+   etk_widget_raise(ETK_WIDGET(mdi_window));
 }
 
 /* Called when the mouse releases the close button */
-static void _etk_mdi_window_close_mouse_up_cb(void *data, Evas_Object *obj, 
const char *emission, const char *source)
+static void _etk_mdi_window_close_mouse_clicked_cb(void *data, Evas_Object 
*obj, const char *emission, const char *source)
 {
    Etk_Mdi_Window *mdi_window;
 
@@ -840,46 +474,6 @@
    return ETK_FALSE;
 }
 
-static char *_etk_mdi_window_wm_theme_path_get(void)
-{
-   char *wm_theme_file;
-
-   wm_theme_file = _etk_mdi_window_wm_theme_find(etk_config_wm_theme_get());
-   if (!wm_theme_file)
-   {
-      /* fallback to default theme */
-      wm_theme_file = _etk_mdi_window_wm_theme_find("default");
-      if (!wm_theme_file)
-      {
-         return NULL;
-      }
-   }
-   return wm_theme_file;
-}
-
-/* Finds the theme called "theme_name" in the subdir wm and returns its path, 
or NULL on failure */
-static char *_etk_mdi_window_wm_theme_find(const char *theme_name)
-{
-   char path[PATH_MAX];
-   char *home;
-
-   if (!theme_name)
-      return NULL;
-
-   if ((home = getenv("HOME")))
-   {
-      snprintf(path, PATH_MAX, "%s/.e/etk/wm/%s.edj", home, theme_name);
-      if (ecore_file_exists(path))
-         return strdup(path);
-   }
-
-   snprintf(path, PATH_MAX, PACKAGE_DATA_DIR "/wm/%s.edj", theme_name);
-   if (ecore_file_exists(path))
-      return strdup(path);
-
-   return NULL;
-}
-
 /** @} */
 
 /**************************
@@ -892,13 +486,17 @@
  * @addtogroup Etk_Mdi_Window
  *
  * @image html widgets/mdi_window.png
- * An Etk_Mdi_Window represents a top-level widget and consists of a title bar 
with window decorations and frame.
  *
  * \par Object Hierarchy:
  * - Etk_Object
  *   - Etk_Widget
  *     - Etk_Container
  *       - Etk_Bin
- *         - Etk_Toplevel
- *           - Etk_Mdi_Window
+ *         - Etk_Mdi_Window
+ *
+ * \par Properties:
+ * @prop_name "title": The title of the mdi_window
+ * @prop_type String (char *)
+ * @prop_rw
+ * @prop_val NULL
  */
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_mdi_window.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- etk_mdi_window.h    19 Jul 2007 22:31:47 -0000      1.1
+++ etk_mdi_window.h    20 Jul 2007 22:45:27 -0000      1.2
@@ -2,19 +2,16 @@
 #ifndef _ETK_MDI_WINDOW_H_
 #define _ETK_MDI_WINDOW_H_
 
-#include <Evas.h>
-#include <Ecore.h>
-
-#include "etk_toplevel.h"
+#include "etk_bin.h"
 #include "etk_types.h"
 
 /**
  * @defgroup Etk_Mdi_Window Etk_Mdi_Window
- * @brief A toplevel-widget in a mdi area
+ * @brief A widget in a mdi area
  * @{
  */
 
-/** Gets the type of a window */
+/** Gets the type of a mdi_window */
 #define ETK_MDI_WINDOW_TYPE    (etk_mdi_window_type_get())
 /** Casts the object to an Etk_Mdi_Window */
 #define ETK_MDI_WINDOW(obj)    (ETK_OBJECT_CAST((obj), ETK_MDI_WINDOW_TYPE, 
Etk_Mdi_Window))
@@ -24,45 +21,52 @@
 typedef struct _Etk_Mdi_Window_Data Etk_Mdi_Window_Data;
 
 /**
- * @brief @widget A toplevel-widget in a mdi area
+ * @brief @widget A widget in a mdi area
  * @structinfo
  */
 struct _Etk_Mdi_Window
 {
-   /* Inherit from Etk_Toplevel */
-   Etk_Toplevel toplevel;
+   /* private: */
+   /* Inherit from Etk_Bin */
+   Etk_Bin bin;
 
-   Etk_Bool (*delete_event)(Etk_Mdi_Window *window);
+   Etk_Bool (*delete_event)(Etk_Mdi_Window *mdi_window);
 
-   /* private: */
-   char *wm_theme_file;
-   Etk_Bool wait_size_request;
-   Etk_Mdi_Window_Data *data;
+   char *title;
+   Etk_Position position;
+   Etk_Bool maximized;
+   Etk_Bool dragging;
+   int drag_offset_x;
+   int drag_offset_y;
+   Etk_Bool resizing;
+   int resize_offset_x;
+   int resize_offset_y;
 };
 
 Etk_Type   *etk_mdi_window_type_get(void);
-Etk_Widget *etk_mdi_window_new(Evas *evas);
+Etk_Widget *etk_mdi_window_new(void);
 
-void        etk_mdi_window_delete_request(Etk_Mdi_Window *window);
+void        etk_mdi_window_delete_request(Etk_Mdi_Window *mdi_window);
 
-void        etk_mdi_window_title_set(Etk_Mdi_Window *window, const char 
*title);
-const char *etk_mdi_window_title_get(Etk_Mdi_Window *window);
+void        etk_mdi_window_title_set(Etk_Mdi_Window *mdi_window, const char 
*title);
+const char *etk_mdi_window_title_get(Etk_Mdi_Window *mdi_window);
 
-void        etk_mdi_window_move(Etk_Mdi_Window *window, int x, int y);
-void        etk_mdi_window_resize(Etk_Mdi_Window *window, int w, int h);
-void        etk_mdi_window_geometry_get(Etk_Mdi_Window *window, int *x, int 
*y, int *w, int *h);
-void        etk_mdi_window_modal_for_window(Etk_Mdi_Window *window_to_modal, 
Etk_Mdi_Window *window);
+void        etk_mdi_window_move(Etk_Mdi_Window *mdi_window, int x, int y);
+void        etk_mdi_window_position_get(Etk_Mdi_Window *mdi_window, int *x, 
int *y);
 
-void        etk_mdi_window_raise(Etk_Mdi_Window *window);
-void        etk_mdi_window_lower(Etk_Mdi_Window *window);
+/*
+void        etk_mdi_window_modal_for_window(Etk_Mdi_Window *window_to_modal, 
Etk_Mdi_Window *mdi_window);
+*/
 
-void        etk_mdi_window_maximized_set(Etk_Mdi_Window *window, Etk_Bool 
maximized);
-Etk_Bool    etk_mdi_window_maximized_get(Etk_Mdi_Window *window);
+void        etk_mdi_window_maximized_set(Etk_Mdi_Window *mdi_window, Etk_Bool 
maximized);
+Etk_Bool    etk_mdi_window_maximized_get(Etk_Mdi_Window *mdi_window);
 
-void        etk_mdi_window_decorated_set(Etk_Mdi_Window *window, Etk_Bool 
decorated);
-Etk_Bool    etk_mdi_window_decorated_get(Etk_Mdi_Window *window);
+/*
+void        etk_mdi_window_decorated_set(Etk_Mdi_Window *mdi_window, Etk_Bool 
decorated);
+Etk_Bool    etk_mdi_window_decorated_get(Etk_Mdi_Window *mdi_window);
+*/
 
-Etk_Bool    etk_mdi_window_hide_on_delete(Etk_Object *window, void *data);
+Etk_Bool    etk_mdi_window_hide_on_delete(Etk_Object *mdi_window, void *data);
 
 /** @} */
 
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_types.h,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -3 -r1.67 -r1.68
--- etk_types.h 19 Jul 2007 22:31:47 -0000      1.67
+++ etk_types.h 20 Jul 2007 22:45:27 -0000      1.68
@@ -70,6 +70,7 @@
 typedef struct Etk_Iconbox_Model Etk_Iconbox_Model;
 typedef struct Etk_Image Etk_Image;
 typedef struct Etk_Label Etk_Label;
+typedef struct _Etk_Mdi_Area Etk_Mdi_Area;
 typedef struct _Etk_Mdi_Window Etk_Mdi_Window;
 typedef struct Etk_Menu Etk_Menu;
 typedef struct Etk_Menu_Bar Etk_Menu_Bar;



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to