X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=ioncore%2Fframe.c;fp=ioncore%2Fframe.c;h=f85a29624e04ffcb2ecd2fa7239a000b89e3ca2d;hb=720e6978185b09f2b2f60a6b96018238085a7238;hp=6937b3d21b27b20d70c234b21c20de07f9527d30;hpb=a6561c9679cd701b0d50c3cfd44e4664f7df2b2f;p=ion3.git diff --git a/ioncore/frame.c b/ioncore/frame.c index 6937b3d..f85a296 100644 --- a/ioncore/frame.c +++ b/ioncore/frame.c @@ -50,11 +50,32 @@ static void frame_add_mode_bindmaps(WFrame *frame); WHook *frame_managed_changed_hook=NULL; -#define IS_FLOATING_MODE(FRAME) \ - ((FRAME)->mode==FRAME_MODE_FLOATING || (FRAME)->mode==FRAME_MODE_TRANSIENT) -#define FORWARD_CWIN_RQGEOM(FRAME) IS_FLOATING_MODE(FRAME) -#define USE_MINMAX(FRAME) IS_FLOATING_MODE(FRAME) -#define DEST_EMPTY(FRAME) IS_FLOATING_MODE(FRAME) +#define FORWARD_CWIN_RQGEOM(FRAME) framemode_is_floating(frame_mode(FRAME)) +#define USE_MINMAX(FRAME) framemode_is_floating(frame_mode(FRAME)) +#define DEST_EMPTY(FRAME) framemode_is_floating(frame_mode(FRAME)) + + +WFrameMode framemode_unalt(WFrameMode mode) +{ + if(mode==FRAME_MODE_UNKNOWN_ALT) + return FRAME_MODE_UNKNOWN; + else if(mode==FRAME_MODE_TILED_ALT) + return FRAME_MODE_TILED; + else if(mode==FRAME_MODE_FLOATING_ALT) + return FRAME_MODE_FLOATING; + else if(mode==FRAME_MODE_TRANSIENT_ALT) + return FRAME_MODE_TRANSIENT; + else + return mode; +} + + +static WFrameMode framemode_is_floating(WFrameMode mode) +{ + WFrameMode modea=framemode_unalt(mode); + + return (modea==FRAME_MODE_FLOATING || modea==FRAME_MODE_TRANSIENT); +} /*{{{ Destroy/create frame */ @@ -130,13 +151,13 @@ void frame_deinit(WFrame *frame) static void frame_add_mode_bindmaps(WFrame *frame) { - WFrameMode mode=frame->mode; + WFrameMode modea=framemode_unalt(frame->mode); - if(mode==FRAME_MODE_FLOATING){ + if(modea==FRAME_MODE_FLOATING){ region_add_bindmap((WRegion*)frame, ioncore_mplex_toplevel_bindmap); region_add_bindmap((WRegion*)frame, ioncore_frame_toplevel_bindmap); region_add_bindmap((WRegion*)frame, ioncore_frame_floating_bindmap); - }else if(mode==FRAME_MODE_TRANSIENT){ + }else if(modea==FRAME_MODE_TRANSIENT){ region_add_bindmap((WRegion*)frame, ioncore_frame_transient_bindmap); region_add_bindmap((WRegion*)frame, ioncore_frame_floating_bindmap); }else{ @@ -170,7 +191,7 @@ void frame_set_mode(WFrame *frame, WFrameMode mode) frame_initialise_gr(frame); mplex_fit_managed(&frame->mplex); - frame_recalc_bar(frame); + frame_recalc_bar(frame, TRUE); frame_set_background(frame, TRUE); } @@ -181,12 +202,15 @@ WFrameMode frame_mode(WFrame *frame) } -StringIntMap frame_modes[]={ +static StringIntMap frame_modes[]={ {"unknown", FRAME_MODE_UNKNOWN}, + {"unknown-alt", FRAME_MODE_UNKNOWN_ALT}, {"tiled", FRAME_MODE_TILED}, {"tiled-alt", FRAME_MODE_TILED_ALT}, {"floating", FRAME_MODE_FLOATING}, + {"floating-alt", FRAME_MODE_FLOATING_ALT}, {"transient", FRAME_MODE_TRANSIENT}, + {"transient-alt", FRAME_MODE_TRANSIENT_ALT}, END_STRINGINTMAP }; @@ -203,7 +227,9 @@ const char *frame_mode_extl(WFrame *frame) /*EXTL_DOC - * Set frame mode. + * Set frame mode (one of + * \codestr{unknown}, \codestr{tiled}, \codestr{floating}, \codestr{transient}, + * or any of these suffixed with \codestr{-alt}). */ EXTL_EXPORT_AS(WFrame, set_mode) bool frame_set_mode_extl(WFrame *frame, const char *modestr) @@ -386,7 +412,7 @@ static bool frame_initialise_titles(WFrame *frame) } } - frame_recalc_bar(frame); + frame_recalc_bar(frame, FALSE); return TRUE; } @@ -453,36 +479,36 @@ void frame_size_hints(WFrame *frame, WSizeHints *hints_ret) woff=maxof(REGION_GEOM(frame).w-subgeom.w, 0); hoff=maxof(REGION_GEOM(frame).h-subgeom.h, 0); - if(FRAME_CURRENT(frame)!=NULL){ + if(FRAME_CURRENT(frame)!=NULL) region_size_hints(FRAME_CURRENT(frame), hints_ret); - if(!USE_MINMAX(frame)){ - hints_ret->max_set=0; - hints_ret->min_set=0; - /*hints_ret->base_set=0;*/ - hints_ret->aspect_set=0; - hints_ret->no_constrain=FALSE; - /*hints_ret->no_constrain=TRUE;*/ - } - }else{ + else sizehints_clear(hints_ret); - } FRAME_MX_FOR_ALL(sub, frame, tmp){ sizehints_adjust_for(hints_ret, sub); } - if(!hints_ret->base_set){ - hints_ret->base_width=0; - hints_ret->base_height=0; - hints_ret->base_set=TRUE; + if(!USE_MINMAX(frame)){ + hints_ret->max_set=0; + hints_ret->min_set=0; + /*hints_ret->base_set=0;*/ + hints_ret->aspect_set=0; + hints_ret->no_constrain=FALSE; + /*hints_ret->no_constrain=TRUE;*/ } - + if(!hints_ret->min_set){ hints_ret->min_width=0; hints_ret->min_height=0; hints_ret->min_set=TRUE; } + if(!hints_ret->base_set){ + hints_ret->base_width=0; + hints_ret->base_height=0; + hints_ret->base_set=TRUE; + } + hints_ret->base_width+=woff; hints_ret->base_height+=hoff; hints_ret->max_width+=woff; @@ -868,7 +894,7 @@ void frame_managed_notify(WFrame *frame, WRegion *sub, WRegionNotify how) how==ioncore_g.notifies.tag){ frame_update_attrs(frame); - frame_recalc_bar(frame); + frame_recalc_bar(frame, FALSE); frame_draw_bar(frame, FALSE); } } @@ -880,7 +906,7 @@ static void frame_size_changed_default(WFrame *frame, int bar_w=frame->bar_w; if(wchg) - frame_recalc_bar(frame); + frame_recalc_bar(frame, TRUE); if(frame->barmode==FRAME_BAR_SHAPED && ((!wchg && hchg) || (wchg && bar_w==frame->bar_w))){ @@ -953,7 +979,7 @@ WPHolder *frame_prepare_manage_transient(WFrame *frame, /* Transient manager searches should not cross tiled frames * unless explicitly floated. */ - if(IS_FLOATING_MODE(frame) || + if(framemode_is_floating(frame_mode(frame)) || extl_table_is_bool_set(transient->proptab, "float")){ return region_prepare_manage_transient_default((WRegion*)frame, transient,