]> git.decadent.org.uk Git - ion3.git/commitdiff
Reverted upstream change 'Full screen mode fixes and improvements' which somehow...
authorBen Hutchings <ben@decadent.org.uk>
Sun, 25 Mar 2007 20:26:43 +0000 (20:26 +0000)
committerBen Hutchings <ben@decadent.org.uk>
Sun, 2 Nov 2008 12:35:23 +0000 (12:35 +0000)
debian/changelog
debian/patches/00list
debian/patches/101_revert-full-screen-changes.diff [new file with mode: 0644]

index a05a58254271191029a2f55a8bfef93c5bf5d7e3..4f8feeb34d6748c85f3236695b48ff2566a94013 100644 (file)
@@ -2,10 +2,12 @@ ion3 (20070318-1) unstable; urgency=low
 
   * New maintainer - closes: #414378
   * New upstream release - closes: #413469
+  * Reverted upstream changes to full-screen behaviour which break dock
+    sizing
   * Updated FAQ
   * Added docker and ion3-scripts to suggested packages
 
- -- Ben Hutchings <ben@decadent.org.uk>  Sun, 25 Mar 2007 14:14:05 +0100
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 25 Mar 2007 20:51:55 +0100
 
 ion3 (20070203-1) experimental; urgency=low
 
index be9c5418f1779c6cdac41c5e73ea6ce768d9ed09..bc489030fabff79db0400477c43b8a3cde8d456a 100644 (file)
@@ -1,3 +1,4 @@
+101_revert-full-screen-changes.diff
 201_fix-paths.diff
 202_fix-menus.diff
 204_fix-bindings.diff
diff --git a/debian/patches/101_revert-full-screen-changes.diff b/debian/patches/101_revert-full-screen-changes.diff
new file mode 100644 (file)
index 0000000..12f827b
--- /dev/null
@@ -0,0 +1,367 @@
+#! /bin/sh -e
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch) patch -f --no-backup-if-mismatch -p1 < $0;;
+    -unpatch) patch -f --no-backup-if-mismatch -R -p1 < $0;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1;;
+esac
+
+exit 0
+@DPATCH@                                                                                                                                                       
+reverted:
+--- new-ion3-darcs/ioncore/clientwin.c 2007-03-25 20:10:54.000000000 +0100
++++ old-ion3-darcs/ioncore/clientwin.c 2007-03-25 20:10:54.000000000 +0100
+@@ -43,7 +43,6 @@
+ #include "bindmaps.h"
+ #include "return.h"
+ #include "conf.h"
+-#include "group.h"
+ static void set_clientwin_state(WClientWin *cwin, int state);
+@@ -1071,31 +1070,26 @@
+ /*{{{ ConfigureRequest */
++void clientwin_handle_configure_request(WClientWin *cwin,
++                                        XConfigureRequestEvent *ev)
+-static bool check_fs_cfgrq(WClientWin *cwin, XConfigureRequestEvent *ev)
+ {
++    if(ev->value_mask&CWBorderWidth)
++        cwin->orig_bw=ev->border_width;
++    
++    if(cwin->flags&CLIENTWIN_PROP_IGNORE_CFGRQ){
++        sendconfig_clientwin(cwin);
++        return;
++    }
++
+     /* check full screen request */
+     if((ev->value_mask&(CWWidth|CWHeight))==(CWWidth|CWHeight)){
++        bool sw=clientwin_fullscreen_may_switchto(cwin);
++        if(clientwin_check_fullscreen_request(cwin, ev->width, ev->height, sw))
++            return;
+-        WRegion *grp=region_groupleader_of((WRegion*)cwin);
+-        WScreen *scr=clientwin_fullscreen_chkrq(cwin, ev->width, ev->height);
+-        
+-        if(scr!=NULL && REGION_MANAGER(grp)!=(WRegion*)scr){
+-            bool sw=clientwin_fullscreen_may_switchto(cwin);
+-            
+-            cwin->flags|=CLIENTWIN_FS_RQ;
+-            
+-            if(!region_fullscreen_scr(grp, scr, sw))
+-                cwin->flags&=~CLIENTWIN_FS_RQ;
+-        }
+-        
+-        return TRUE;
+     }
++    cwin->flags|=CLIENTWIN_NEED_CFGNTFY;
+-    return FALSE;
+-}
+-
+-static bool check_normal_cfgrq(WClientWin *cwin, XConfigureRequestEvent *ev)
+-{
+     if(ev->value_mask&(CWX|CWY|CWWidth|CWHeight)){
+         WRQGeomParams rq=RQGEOMPARAMS_INIT;
+         int gdx=0, gdy=0;
+@@ -1150,25 +1144,6 @@
+         }
+         
+         region_rqgeom((WRegion*)cwin, &rq, NULL);
+-        
+-        return TRUE;
+-    }
+-    
+-    return FALSE;
+-}
+-
+-
+-void clientwin_handle_configure_request(WClientWin *cwin,
+-                                        XConfigureRequestEvent *ev)
+-{
+-    if(ev->value_mask&CWBorderWidth)
+-        cwin->orig_bw=ev->border_width;
+-    
+-    cwin->flags|=CLIENTWIN_NEED_CFGNTFY;
+-
+-    if(!(cwin->flags&CLIENTWIN_PROP_IGNORE_CFGRQ)){
+-        if(!check_fs_cfgrq(cwin, ev))
+-            check_normal_cfgrq(cwin, ev);
+     }
+     if(cwin->flags&CLIENTWIN_NEED_CFGNTFY){
+reverted:
+--- new-ion3-darcs/ioncore/fullscreen.c        2007-03-25 20:10:54.000000000 +0100
++++ old-ion3-darcs/ioncore/fullscreen.c        2007-03-25 20:10:54.000000000 +0100
+@@ -20,7 +20,7 @@
+ #include "fullscreen.h"
+ #include "mwmhints.h"
+ #include "focus.h"
++#include "group-cw.h"
+-#include "group.h"
+ #include "return.h"
+@@ -125,7 +125,8 @@
+ }
++bool clientwin_check_fullscreen_request(WClientWin *cwin, int w, int h,
++                                        bool sw)
+-WScreen *clientwin_fullscreen_chkrq(WClientWin *cwin, int w, int h)
+ {
+     WScreen *scr;
+     WMwmHints *mwm;
+@@ -134,7 +135,7 @@
+     mwm=xwindow_get_mwmhints(cwin->win);
+     if(mwm==NULL || !(mwm->flags&MWM_HINTS_DECORATIONS) ||
+        mwm->decorations!=0)
++        return FALSE;
+-        return NULL;
+     
+     FOR_ALL_SCREENS(scr){
+         if(!region_same_rootwin((WRegion*)scr, (WRegion*)cwin))
+@@ -143,11 +144,17 @@
+          * and doesn't set position, so we also don't check position here, 
+          * and instead take the first screen with matching size.
+          */
++        if(REGION_GEOM(scr).w==w && REGION_GEOM(scr).h==h){
++            cwin->flags|=CLIENTWIN_FS_RQ;
++            if(!region_fullscreen_scr((WRegion*)cwin, (WScreen*)scr, sw)){
++                cwin->flags&=~CLIENTWIN_FS_RQ;
++                return FALSE;
++            }
++            return TRUE;
++        }
+-        if(REGION_GEOM(scr).w==w && REGION_GEOM(scr).h==h)
+-            return scr;
+     }
+     
++    return FALSE;
+-    return NULL;
+ }
+reverted:
+--- new-ion3-darcs/ioncore/fullscreen.h        2007-03-25 20:10:54.000000000 +0100
++++ old-ion3-darcs/ioncore/fullscreen.h        2007-03-25 20:10:54.000000000 +0100
+@@ -19,7 +19,8 @@
+ #define REGION_IS_FULLSCREEN(REG) OBJ_IS(REGION_PARENT(REG), WScreen)
++extern bool clientwin_check_fullscreen_request(WClientWin *cwin, 
++                                               int w, int h, bool switchto);
+-extern WScreen *clientwin_fullscreen_chkrq(WClientWin *cwin, int w, int h);
+ extern bool clientwin_fullscreen_may_switchto(WClientWin *cwin);
+ extern bool region_fullscreen_scr(WRegion *reg, WScreen *vp, bool switchto);
+reverted:
+--- new-ion3-darcs/ioncore/manage.c    2007-03-25 20:10:54.000000000 +0100
++++ old-ion3-darcs/ioncore/manage.c    2007-03-25 20:10:54.000000000 +0100
+@@ -136,56 +136,15 @@
+ }
+-static bool try_fullscreen(WClientWin *cwin, WScreen *dflt, 
+-                           const WManageParams *param)
+-{
+-    WScreen *fs_scr=NULL;
+-    bool fs=FALSE, tmp;
+-    
+-    /* Check fullscreen mode. (This is intentionally not done
+-     * for transients and windows with target winprops.)
+-     */
+-    if(extl_table_gets_b(cwin->proptab, "fullscreen", &tmp)){
+-        if(!tmp)
+-            return FALSE;
+-        fs_scr=dflt;
+-    }
+-
+-    if(fs_scr==NULL)
+-        fs_scr=netwm_check_initial_fullscreen(cwin);
+-
+-    if(fs_scr==NULL)
+-        fs_scr=clientwin_fullscreen_chkrq(cwin, param->geom.w, param->geom.h);
+-    
+-    if(fs_scr!=NULL){
+-        WPHolder *fs_ph=region_prepare_manage((WRegion*)fs_scr, cwin, param,
+-                                              MANAGE_REDIR_STRICT_NO);
+-        
+-        if(fs_ph!=NULL){
+-            int swf=(param->switchto ? PHOLDER_ATTACH_SWITCHTO : 0);
+-            
+-            cwin->flags|=CLIENTWIN_FS_RQ;
+-            
+-            fs=pholder_attach(fs_ph, swf, (WRegion*)cwin);
+-            
+-            if(!fs)
+-                cwin->flags&=~CLIENTWIN_FS_RQ;
+-                
+-            destroy_obj((Obj*)fs_ph);
+-        }
+-    }
+-
+-    return fs;
+-}
+-
+-
+ bool clientwin_do_manage_default(WClientWin *cwin, 
+                                  const WManageParams *param)
+ {
++    WRegion *r=NULL, *r2;
+     WScreen *scr=NULL;
+     WPHolder *ph=NULL;
++    int fs=-1;
++    int swf;
++    bool ok, tmp, uq=FALSE;
+-    int swf=(param->switchto ? PHOLDER_ATTACH_SWITCHTO : 0);
+-    bool ok, uq=FALSE;
+     /* Find a suitable screen */
+     scr=clientwin_find_suitable_screen(cwin, param);
+@@ -210,25 +169,44 @@
+         ph=region_prepare_manage((WRegion*)scr, cwin, param,
+                                  MANAGE_REDIR_PREFER_YES);
++        /* Check fullscreen mode. (This is intentionally not done
++         * for transients and windows with target winprops.)
++         */
++        if(extl_table_gets_b(cwin->proptab, "fullscreen", &tmp))
++            fs=tmp;
++
++        if(fs<0)
++            fs=netwm_check_initial_fullscreen(cwin, param->switchto);
++    
++        if(fs<0){
++            fs=clientwin_check_fullscreen_request(cwin, 
++                                                  param->geom.w,
++                                                  param->geom.h,
++                                                  param->switchto);
++        }
++    }
++
++    if(fs>0){
++        /* Full-screen mode succesfull. */
++        if(pholder_target(ph)==(WRegion*)scr){
++            /* Discard useless placeholder. */
+-        if(try_fullscreen(cwin, scr, param)){
+-            if(pholder_target(ph)!=(WRegion*)region_screen_of((WRegion*)cwin)){
+-                WRegion *grp=region_groupleader_of((WRegion*)cwin);
+-                if(region_do_set_return(grp, ph))
+-                    return TRUE;
+-            }
+             destroy_obj((Obj*)ph);
+             return TRUE;
+         }
+         
++        if(!region_do_set_return((WRegion*)cwin, ph))
++            destroy_obj((Obj*)ph);
++        
++        return TRUE;
+     }
++        
+-
+     if(ph==NULL)
+         return FALSE;
+     
+     /* Not in full-screen mode; use the placeholder to attach. */
+     
++    swf=(param->switchto ? PHOLDER_ATTACH_SWITCHTO : 0);
+     ok=pholder_attach(ph, swf, (WRegion*)cwin);
+-    
+     destroy_obj((Obj*)ph);
+     
+     if(uq && ok)
+reverted:
+--- new-ion3-darcs/ioncore/netwm.c     2007-03-25 20:10:54.000000000 +0100
++++ old-ion3-darcs/ioncore/netwm.c     2007-03-25 20:10:54.000000000 +0100
+@@ -22,7 +22,6 @@
+ #include "focus.h"
+ #include "xwindow.h"
+ #include "extlconv.h"
+-#include "group.h"
+ /*{{{ Atoms */
+@@ -86,7 +85,7 @@
+ /*{{{ _NET_WM_STATE */
++int netwm_check_initial_fullscreen(WClientWin *cwin, bool sw)
+-WScreen *netwm_check_initial_fullscreen(WClientWin *cwin)
+ {
+     int i, n;
+@@ -97,16 +96,18 @@
+                    1, TRUE, (uchar**)&data);
+     
+     if(n<0)
++        return -1;
+-        return NULL;
+     
+     for(i=0; i<n; i++){
++        if(data[i]==(long)atom_net_wm_state_fullscreen){
++            ret=region_enter_fullscreen((WRegion*)cwin, sw);
++            break;
++        }
+-        if(data[i]==(long)atom_net_wm_state_fullscreen)
+-            return region_screen_of((WRegion*)cwin);
+     }
+     
+     XFree((void*)data);
++    return ret;
+-    return NULL;
+ }
+@@ -144,10 +145,9 @@
+     if(!REGION_IS_FULLSCREEN(cwin)){
+         if(ev->data.l[0]==_NET_WM_STATE_ADD || 
+            ev->data.l[0]==_NET_WM_STATE_TOGGLE){
+-            WRegion *grp=region_groupleader_of((WRegion*)cwin);
+             bool sw=clientwin_fullscreen_may_switchto(cwin);
+             cwin->flags|=CLIENTWIN_FS_RQ;
++            if(!region_enter_fullscreen((WRegion*)cwin, sw))
+-            if(!region_enter_fullscreen(grp, sw))
+                 cwin->flags&=~CLIENTWIN_FS_RQ;
+         }else{
+             /* Should not be set.. */
+@@ -156,10 +156,9 @@
+     }else{
+         if(ev->data.l[0]==_NET_WM_STATE_REMOVE || 
+            ev->data.l[0]==_NET_WM_STATE_TOGGLE){
+-            WRegion *grp=region_groupleader_of((WRegion*)cwin);
+             bool sw=clientwin_fullscreen_may_switchto(cwin);
+             cwin->flags&=~CLIENTWIN_FS_RQ;
++            region_leave_fullscreen((WRegion*)cwin, sw);
+-            region_leave_fullscreen(grp, sw);
+         }else{
+             /* Set the flag */
+             cwin->flags|=CLIENTWIN_FS_RQ;
+reverted:
+--- new-ion3-darcs/ioncore/netwm.h     2007-03-25 20:10:54.000000000 +0100
++++ old-ion3-darcs/ioncore/netwm.h     2007-03-25 20:10:54.000000000 +0100
+@@ -14,7 +14,6 @@
+ #include "common.h"
+ #include "rootwin.h"
+-#include "screen.h"
+ #define _NET_WM_STATE_REMOVE        0    /* remove/unset property */
+ #define _NET_WM_STATE_ADD           1    /* add/set property */
+@@ -23,7 +22,7 @@
+ extern void netwm_init();
+ extern void netwm_init_rootwin(WRootWin *rw);
++extern int netwm_check_initial_fullscreen(WClientWin *cwin, bool switchto);
+-extern WScreen *netwm_check_initial_fullscreen(WClientWin *cwin);
+ extern void netwm_update_state(WClientWin *cwin);
+ extern void netwm_delete_state(WClientWin *cwin);
+ extern void netwm_set_active(WRegion *reg);