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 */
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{
frame_initialise_gr(frame);
mplex_fit_managed(&frame->mplex);
- frame_recalc_bar(frame);
+ frame_recalc_bar(frame, TRUE);
frame_set_background(frame, TRUE);
}
}
-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
};
/*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)
}
}
- frame_recalc_bar(frame);
+ frame_recalc_bar(frame, FALSE);
return TRUE;
}
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;
how==ioncore_g.notifies.tag){
frame_update_attrs(frame);
- frame_recalc_bar(frame);
+ frame_recalc_bar(frame, FALSE);
frame_draw_bar(frame, FALSE);
}
}
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))){
/* 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,