Enlightenment CVS committal
Author : sebastid
Project : e17
Module : apps/e
Dir : e17/apps/e/src/bin
Modified Files:
e_win.h e_win.c
Log Message:
Add convenience functions for settings layer and sticky.
Support internal states, and add centered state.
Add object paranoia check.
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_win.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- e_win.h 11 Jul 2005 09:19:17 -0000 1.1
+++ e_win.h 30 Aug 2005 01:16:48 -0000 1.2
@@ -29,6 +29,10 @@
void (*cb_resize) (E_Win *win);
void (*cb_delete) (E_Win *win);
void *data;
+
+ struct {
+ unsigned char centered : 1;
+ } state;
};
EAPI int e_win_init (void);
@@ -46,6 +50,8 @@
EAPI void e_win_shaped_set (E_Win *win, int shaped);
EAPI void e_win_avoid_damage_set (E_Win *win, int avoid);
EAPI void e_win_borderless_set (E_Win *win, int borderless);
+EAPI void e_win_layer_set (E_Win *win, int layer);
+EAPI void e_win_sticky_set (E_Win *win, int sticky);
EAPI void e_win_move_callback_set (E_Win *win, void (*func) (E_Win *win));
EAPI void e_win_resize_callback_set(E_Win *win, void (*func) (E_Win *win));
EAPI void e_win_delete_callback_set(E_Win *win, void (*func) (E_Win *win));
@@ -56,5 +62,7 @@
EAPI void e_win_name_class_set (E_Win *win, char *name, char *class);
EAPI void e_win_title_set (E_Win *win, char *title);
+EAPI void e_win_centered_set (E_Win *win, int centered);
+
#endif
#endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_win.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- e_win.c 12 Jul 2005 18:08:52 -0000 1.2
+++ e_win.c 30 Aug 2005 01:16:48 -0000 1.3
@@ -6,6 +6,7 @@
/* local subsystem functions */
static void _e_win_free(E_Win *win);
static void _e_win_prop_update(E_Win *win);
+static void _e_win_state_update(E_Win *win);
static void _e_win_cb_move(Ecore_Evas *ee);
static void _e_win_cb_resize(Ecore_Evas *ee);
static void _e_win_cb_delete(Ecore_Evas *ee);
@@ -40,6 +41,7 @@
win = E_OBJECT_ALLOC(E_Win, E_WIN_TYPE, _e_win_free);
if (!win) return NULL;
win->container = con;
+ /* TODO: Maybe use an own config for windows? */
if (e_canvas_engine_decide(e_config->evas_engine_errors) ==
E_EVAS_ENGINE_GL_X11)
{
@@ -185,42 +187,72 @@
void
e_win_move_callback_set(E_Win *win, void (*func) (E_Win *win))
{
+ E_OBJECT_CHECK(win);
+ E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
win->cb_move = func;
}
void
e_win_resize_callback_set(E_Win *win, void (*func) (E_Win *win))
{
+ E_OBJECT_CHECK(win);
+ E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
win->cb_resize = func;
}
void
e_win_delete_callback_set(E_Win *win, void (*func) (E_Win *win))
{
+ E_OBJECT_CHECK(win);
+ E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
win->cb_delete = func;
}
void
e_win_shaped_set(E_Win *win, int shaped)
{
+ E_OBJECT_CHECK(win);
+ E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
ecore_evas_shaped_set(win->ecore_evas, shaped);
}
void
e_win_avoid_damage_set(E_Win *win, int avoid)
{
+ E_OBJECT_CHECK(win);
+ E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
ecore_evas_avoid_damage_set(win->ecore_evas, avoid);
}
void
e_win_borderless_set(E_Win *win, int borderless)
{
+ E_OBJECT_CHECK(win);
+ E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
ecore_evas_borderless_set(win->ecore_evas, borderless);
}
void
+e_win_layer_set(E_Win *win, int layer)
+{
+ E_OBJECT_CHECK(win);
+ E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
+ ecore_evas_layer_set(win->ecore_evas, layer);
+}
+
+void
+e_win_sticky_set(E_Win *win, int sticky)
+{
+ E_OBJECT_CHECK(win);
+ E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
+ ecore_evas_sticky_set(win->ecore_evas, sticky);
+}
+
+void
e_win_size_min_set(E_Win *win, int w, int h)
{
+ E_OBJECT_CHECK(win);
+ E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
win->min_w = w;
win->min_h = h;
if (win->border)
@@ -230,6 +262,8 @@
void
e_win_size_max_set(E_Win *win, int w, int h)
{
+ E_OBJECT_CHECK(win);
+ E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
win->max_w = w;
win->max_h = h;
if (win->border)
@@ -239,6 +273,8 @@
void
e_win_size_base_set(E_Win *win, int w, int h)
{
+ E_OBJECT_CHECK(win);
+ E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
win->base_w = w;
win->base_h = h;
if (win->border)
@@ -248,6 +284,8 @@
void
e_win_step_set(E_Win *win, int x, int y)
{
+ E_OBJECT_CHECK(win);
+ E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
win->step_x = x;
win->step_y = y;
if (win->border)
@@ -257,15 +295,41 @@
void
e_win_name_class_set(E_Win *win, char *name, char *class)
{
+ E_OBJECT_CHECK(win);
+ E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
ecore_evas_name_class_set(win->ecore_evas, name, class);
}
void
e_win_title_set(E_Win *win, char *title)
{
+ E_OBJECT_CHECK(win);
+ E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
ecore_evas_title_set(win->ecore_evas, title);
}
+void
+e_win_centered_set(E_Win *win, int centered)
+{
+ /* TODO:
+ * if win->border is set the window is shown, so we have to tell
+ * e to center this window by message, now it is checked at
+ * border creation.
+ */
+ E_OBJECT_CHECK(win);
+ E_OBJECT_TYPE_CHECK(win, E_WIN_TYPE);
+ if ((win->state.centered) && (!centered))
+ {
+ win->state.centered = 0;
+ _e_win_state_update(win);
+ }
+ else if ((!win->state.centered) && (centered))
+ {
+ win->state.centered = 1;
+ _e_win_state_update(win);
+ }
+}
+
/* local subsystem functions */
static void
_e_win_free(E_Win *win)
@@ -290,6 +354,25 @@
}
static void
+_e_win_state_update(E_Win *win)
+{
+ Ecore_X_Atom state[1];
+ int num = 0;
+
+ if (win->state.centered)
+ state[num++] = E_ATOM_WINDOW_STATE_CENTERED;
+
+ if (num)
+ {
+ ecore_x_window_prop_card32_set(win->evas_win, E_ATOM_WINDOW_STATE,
state, num);
+ }
+ else
+ {
+ ecore_x_window_prop_property_del(win->evas_win, E_ATOM_WINDOW_STATE);
+ }
+}
+
+static void
_e_win_cb_move(Ecore_Evas *ee)
{
E_Win *win;
-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs