Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_border.c e_border.h e_hints.c e_hints.h 


Log Message:
Kinda fullscreen support...

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v
retrieving revision 1.162
retrieving revision 1.163
diff -u -3 -r1.162 -r1.163
--- e_border.c  28 Apr 2005 10:42:04 -0000      1.162
+++ e_border.c  28 Apr 2005 12:26:57 -0000      1.163
@@ -36,6 +36,7 @@
 static int _e_border_cb_window_shape(void *data, int ev_type, void *ev);
 static int _e_border_cb_window_focus_in(void *data, int ev_type, void *ev);
 static int _e_border_cb_window_focus_out(void *data, int ev_type, void *ev);
+static int _e_border_cb_window_state(void *data, int ev_type, void *ev);
 static int _e_border_cb_client_message(void *data, int ev_type, void *ev);
 
 static void _e_border_cb_signal_move_start(void *data, Evas_Object *obj, const 
char *emission, const char *source);
@@ -156,6 +157,7 @@
    handlers = evas_list_append(handlers, 
ecore_event_handler_add(ECORE_X_EVENT_WINDOW_SHAPE, _e_border_cb_window_shape, 
NULL));
    handlers = evas_list_append(handlers, 
ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, 
_e_border_cb_window_focus_in, NULL));
    handlers = evas_list_append(handlers, 
ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, 
_e_border_cb_window_focus_out, NULL));
+   handlers = evas_list_append(handlers, 
ecore_event_handler_add(ECORE_X_EVENT_WINDOW_STATE, _e_border_cb_window_state, 
NULL));
    handlers = evas_list_append(handlers, 
ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, 
_e_border_cb_client_message, NULL));
    ecore_x_passive_grab_replay_func_set(_e_border_cb_grab_replay, NULL);
 
@@ -316,7 +318,6 @@
    ecore_x_window_border_width_set(win, 0);
    ecore_x_window_show(bd->event_win);
    ecore_x_window_show(bd->client.shell_win);
-   e_container_window_raise(con, bd->win, bd->layer);
    bd->shape = e_container_shape_add(con);
 
    bd->new_client = 1;
@@ -596,11 +597,7 @@
    E_OBJECT_CHECK(bd);
    E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
    _e_border_reorder_before(bd, NULL);
-   ecore_x_window_configure(bd->win,
-                           ECORE_X_WINDOW_CONFIGURE_MASK_SIBLING |
-                           ECORE_X_WINDOW_CONFIGURE_MASK_STACK_MODE,
-                           0, 0, 0, 0, 0,
-                           bd->container->bg_win, ECORE_X_WINDOW_STACK_ABOVE);
+   e_container_window_lower(bd->zone->container, bd->win, bd->layer);
      {
        E_Event_Border_Lower *ev;
        
@@ -944,6 +941,63 @@
        edje_object_signal_emit(bd->bg_object, "unmaximize", "");
      }
 }
+void
+e_border_fullscreen(E_Border *bd)
+{
+   E_OBJECT_CHECK(bd);
+   E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
+
+   if ((bd->shaded) || (bd->shading)) return;
+   if (!bd->fullscreen)
+     {
+       bd->saved.x = bd->x;
+       bd->saved.y = bd->y;
+       bd->saved.w = bd->w;
+       bd->saved.h = bd->h;
+
+       e_hints_window_fullscreen_set(bd->client.win, 1);
+
+       bd->layer = 200;
+
+       e_border_raise(bd);
+       e_border_move_resize(bd,
+                            bd->zone->x - bd->client_inset.l,
+                            bd->zone->y - bd->client_inset.t,
+                            bd->zone->w + bd->client_inset.l + 
bd->client_inset.r,
+                            bd->zone->h + bd->client_inset.t + 
bd->client_inset.b);
+
+       bd->fullscreen = 1;
+       bd->changes.pos = 1;
+       bd->changes.size = 1;
+       bd->changed = 1;
+
+       edje_object_signal_emit(bd->bg_object, "fullscreen", "");
+     }
+}
+
+void
+e_border_unfullscreen(E_Border *bd)
+{
+   E_OBJECT_CHECK(bd);
+   E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
+   if ((bd->shaded) || (bd->shading)) return;
+   if (bd->fullscreen)
+     {
+       e_hints_window_fullscreen_set(bd->client.win, 0);
+
+       e_border_move_resize(bd, bd->saved.x, bd->saved.y, bd->saved.w, 
bd->saved.h);
+
+       bd->layer = 100;
+       bd->fullscreen = 0;
+       bd->changes.pos = 1;
+       bd->changes.size = 1;
+       bd->changed = 1;
+
+       e_border_raise(bd);
+
+       edje_object_signal_emit(bd->bg_object, "unfullscreen", "");
+     }
+}
 
 void
 e_border_iconify(E_Border *bd)
@@ -1696,6 +1750,99 @@
    return 1;
 }
 
+/* FIXME: Really needs cleaning! */
+static int
+_e_border_cb_window_state(void *data, int ev_type, void *ev)
+{
+   E_Border *bd;
+   Ecore_X_Event_Window_State *e;
+   int i;
+
+   e = ev;
+   bd = e_border_find_by_client_window(e->win);
+   if (!bd) return 1;
+   printf("State: 0x%x %d %d\n", bd->client.win, e->state[0], e->state[1]);
+   for (i = 0; i < 2; i++)
+     {
+       int set;
+
+       if (e->state[i] != ECORE_X_WINDOW_STATE_UNKNOWN)
+         {
+            switch (e->action)
+              {
+               case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
+                  ecore_x_netwm_window_state_set(bd->client.win, e->state[i], 
0);
+                  set = 0;
+                  break;
+               case ECORE_X_WINDOW_STATE_ACTION_ADD:
+                  ecore_x_netwm_window_state_set(bd->client.win, e->state[i], 
1);
+                  set = 1;
+                  break;
+               case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
+                  if (ecore_x_netwm_window_state_isset(bd->client.win, 
e->state[i]))
+                    {
+                       ecore_x_netwm_window_state_set(bd->client.win, 
e->state[i], 0);
+                       set = 0;
+                    }
+                  else
+                    {
+                       ecore_x_netwm_window_state_set(bd->client.win, 
e->state[i], 1);
+                       set = 1;
+                    }
+                  break;
+              }
+
+            if (e->state[i] == ECORE_X_WINDOW_STATE_ABOVE)
+              {
+                 if (set)
+                   {
+                      bd->layer = 150;
+                      bd->client.netwm.state.stacking = 1;
+                   }
+                 else
+                   {
+                      bd->layer = 100;
+                      bd->client.netwm.state.stacking = 0;
+                   }
+                 e_border_raise(bd);
+              }
+            else if (e->state[i] == ECORE_X_WINDOW_STATE_BELOW)
+              {
+                 if (set)
+                   {
+                      bd->layer = 50;
+                      bd->client.netwm.state.stacking = 2;
+                   }
+                 else
+                   {
+                      bd->layer = 100;
+                      bd->client.netwm.state.stacking = 0;
+                   }
+                 e_border_raise(bd);
+              }
+            else if (e->state[i] == ECORE_X_WINDOW_STATE_FULLSCREEN)
+              {
+                 if (set)
+                   {
+                      bd->layer = 200;
+                      bd->client.netwm.state.fullscreen = 1;
+
+                      e_border_fullscreen(bd);
+                   }
+                 else
+                   {
+                      bd->layer = 100;
+                      bd->client.netwm.state.fullscreen = 0;
+
+                      e_border_unfullscreen(bd);
+                   }
+                 e_border_raise(bd);
+              }
+         }
+     }
+   return 1;
+}
+
 static int
 _e_border_cb_client_message(void *data, int ev_type, void *ev)
 {
@@ -1929,7 +2076,7 @@
      }
    else if (!strcmp(source, "lower"))
      {
-       e_container_window_lower(bd->zone->container, bd->win, bd->layer);
+       e_border_lower(bd);
      }
 }
 
@@ -2900,6 +3047,20 @@
        ecore_event_add(E_EVENT_BORDER_ADD, ev, 
_e_border_event_border_add_free, NULL);
 
        /* Recreate state */
+       if (ecore_x_netwm_window_type_get(bd->client.win) == 
ECORE_X_WINDOW_TYPE_DESKTOP)
+         bd->layer = 0;
+       else if (ecore_x_netwm_window_state_isset(bd->client.win, 
ECORE_X_WINDOW_STATE_BELOW))
+         bd->layer = 50;
+       else if (ecore_x_netwm_window_state_isset(bd->client.win, 
ECORE_X_WINDOW_STATE_ABOVE))
+         bd->layer = 150;
+       else if (ecore_x_netwm_window_type_get(bd->client.win) == 
ECORE_X_WINDOW_TYPE_DOCK)
+         bd->layer = 150;
+       else if (ecore_x_netwm_window_state_isset(bd->client.win, 
ECORE_X_WINDOW_STATE_FULLSCREEN))
+         bd->layer = 200;
+       else
+         bd->layer = 100;
+       e_container_window_raise(bd->zone->container, bd->win, bd->layer);
+
        if (e_hints_window_sticky_isset(bd->client.win))
          e_border_stick(bd);
        if (e_hints_window_shaded_isset(bd->client.win))
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.h,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -3 -r1.35 -r1.36
--- e_border.h  28 Apr 2005 09:55:40 -0000      1.35
+++ e_border.h  28 Apr 2005 12:26:58 -0000      1.36
@@ -177,6 +177,7 @@
    unsigned char   shaped : 1;
    unsigned char   need_shape_merge : 1;
    unsigned char   need_shape_export : 1;
+   unsigned char   fullscreen : 1;
    
    unsigned char   changed : 1;
    
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_hints.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- e_hints.c   16 Mar 2005 16:10:33 -0000      1.12
+++ e_hints.c   28 Apr 2005 12:26:58 -0000      1.13
@@ -397,6 +397,18 @@
 }
 
 void
+e_hints_window_fullscreen_set(Ecore_X_Window win, int on)
+{
+   ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_FULLSCREEN, on);
+}
+
+int
+e_hints_window_fullscreen_isset(Ecore_X_Window win)
+{
+   return ecore_x_netwm_window_state_isset(win, 
ECORE_X_WINDOW_STATE_FULLSCREEN);
+}
+
+void
 e_hints_window_sticky_set(Ecore_X_Window win, int on)
 {
    ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_STICKY, on);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_hints.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- e_hints.h   16 Mar 2005 16:10:33 -0000      1.7
+++ e_hints.h   28 Apr 2005 12:26:58 -0000      1.8
@@ -29,6 +29,8 @@
 EAPI int  e_hints_window_maximized_isset(Ecore_X_Window win);
 EAPI void e_hints_window_sticky_set(Ecore_X_Window win, int on);
 EAPI int  e_hints_window_sticky_isset(Ecore_X_Window win);
+EAPI void e_hints_window_fullscreen_set(Ecore_X_Window win, int on);
+EAPI int  e_hints_window_fullscreen_isset(Ecore_X_Window win);
 EAPI void e_hints_window_icon_name_get(Ecore_X_Window win);
     
 #endif




-------------------------------------------------------
SF.Net email is sponsored by: Tell us your software development plans!
Take this survey and enter to win a one-year sub to SourceForge.net
Plus IDC's 2005 look-ahead and a copy of this survey
Click here to start!  http://www.idcswdc.com/cgi-bin/survey?id=105hix
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to