The mvwm repository's master branch has been updated. The following shows the diffstat and patchsets between the merged result and HEAD.
commit af8995986c1a942d83ef431189e07ca89f48182a Author: Dominik Vogt <[email protected]> Date: Sat Sep 13 21:01:15 2014 +0100 Screen parsing cleanup. Note that fscreen_scr_arg is a union. --- libs/FScreen.c | 5 ++--- modules/MvwmIconMan/x.c | 3 --- mvwm/menus.c | 1 - mvwm/move_resize.c | 6 +----- mvwm/placement.c | 13 ++++++------- 5 files changed, 9 insertions(+), 19 deletions(-) diff --git a/libs/FScreen.c b/libs/FScreen.c index 096f779..f23a0c6 100644 --- a/libs/FScreen.c +++ b/libs/FScreen.c @@ -692,10 +692,9 @@ int FScreenGetGeometry( ret = FScreenParseGeometryWithScreen(parsestring, &x, &y, &w, &h, &scr); saved = ret & (XNegative | YNegative); ret &= flags; - - arg.mouse_ev = NULL; arg.name = scr; - FScreenGetScrRect(&arg, FSCREEN_BY_NAME, &scr_x, &scr_y, &scr_w, &scr_h); + FScreenGetScrRect( + &arg, FSCREEN_BY_NAME, &scr_x, &scr_y, &scr_w, &scr_h); /* II. Interpret and fill in the values */ diff --git a/modules/MvwmIconMan/x.c b/modules/MvwmIconMan/x.c index 184fea7..e89cef8 100644 --- a/modules/MvwmIconMan/x.c +++ b/modules/MvwmIconMan/x.c @@ -734,14 +734,11 @@ void X_init_manager (int man_id) if (man->geometry_str) { char *scr; fscreen_scr_arg arg; - arg.mouse_ev = NULL; geometry_mask = FScreenParseGeometryWithScreen( man->geometry_str, &man->geometry.x, &man->geometry.y, &man->geometry.cols, &man->geometry.rows, &scr); - arg.name = scr; - FScreenGetScrRect( &arg, FSCREEN_BY_NAME, &man->managed_g.x, &man->managed_g.y, &man->managed_g.width, &man->managed_g.height); diff --git a/mvwm/menus.c b/mvwm/menus.c index 3abd486..54a29df 100644 --- a/mvwm/menus.c +++ b/mvwm/menus.c @@ -7232,7 +7232,6 @@ char *get_menu_options( return action; } pops->pos_hints.has_screen_origin = 1; - arg.mouse_ev = NULL; arg.name = screen; FScreenGetScrRect(&arg, FSCREEN_BY_NAME,&sx, &sy, &sw, &sh); diff --git a/mvwm/move_resize.c b/mvwm/move_resize.c index 5afd788..387e7a9 100644 --- a/mvwm/move_resize.c +++ b/mvwm/move_resize.c @@ -471,12 +471,10 @@ int GetMoveArguments( if (s1 && StrEquals(s1, "screen")) { fscreen_scr_arg parg; - parg.mouse_ev = NULL; free(s1); token = PeekToken(action, &action); parg.name = token; - FScreenGetScrRect(&parg, FSCREEN_BY_NAME, &scr_x, &scr_y, &scr_w, &scr_h); action = GetNextToken(action, &s1); @@ -4784,12 +4782,10 @@ void CMD_Maximize(F_CMD_ARGS) if (StrEquals(token, "screen")) { fscreen_scr_arg arg; - arg.mouse_ev = NULL; + is_screen_given = True; token = PeekToken(taction, &action); - arg.name = token; - FScreenGetScrRect(&arg, FSCREEN_BY_NAME, &scr_x, &scr_y, &scr_w, &scr_h); } diff --git a/mvwm/placement.c b/mvwm/placement.c index c39c00e..9b89946 100644 --- a/mvwm/placement.c +++ b/mvwm/placement.c @@ -754,7 +754,7 @@ static int __pl_minoverlap_get_next_y(const pl_arg_t *arg) x = arg->place_g.x; y = arg->place_g.y; - m = monitor_by_xy(x, y); + m = monitor_by_xy(x, y); if (m == NULL) m = monitor_get_current(); @@ -1474,8 +1474,8 @@ static int __place_get_nowm_pos( * screen. Let's assume the application specified * global coordinates and translate them to the screen. */ - fscreen_scr_arg arg; - arg.mouse_ev = NULL; + fscreen_scr_arg arg; + arg.name = start_style.screen; FScreenTranslateCoordinates( &arg, FSCREEN_BY_NAME, NULL, FSCREEN_GLOBAL, @@ -1684,10 +1684,9 @@ static int __place_window( { if (flags.do_honor_starts_on_screen) { - fscreen_scr_arg arg; - arg.mouse_ev = NULL; - arg.name = SGET_START_SCREEN(*pstyle); + fscreen_scr_arg arg; + arg.name = SGET_START_SCREEN(*pstyle); FScreenGetScrRect(&arg, FSCREEN_BY_NAME, &screen_g.x, &screen_g.y, &screen_g.width, &screen_g.height); @@ -1850,7 +1849,7 @@ static int __place_window( px = start_style.page_x - 1; py = start_style.page_y - 1; reason->page.reason = PR_PAGE_STYLE; - px *= mon->coord.w; + px *= mon->coord.w; py *= mon->coord.h; if (!win_opts->flags.do_override_ppos && !DO_NOT_SHOW_ON_MAP(fw)) commit fe7e4bed62158f14b889859a0bed79f9186acd89 Author: Dominik Vogt <[email protected]> Date: Sat Sep 13 20:56:50 2014 +0100 Fix a crash caused by uninitialised value in FScreenParseGeometryWithScreen(). --- libs/FScreen.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/libs/FScreen.c b/libs/FScreen.c index 05468ac..096f779 100644 --- a/libs/FScreen.c +++ b/libs/FScreen.c @@ -565,24 +565,27 @@ int FScreenParseGeometryWithScreen( /* Safety net */ if (parsestring == NULL || *parsestring == '\0') + { return 0; + } /* If the geometry specification contains an '@' symbol, assume the * screen is specified. This must be the name of the monitor in * question! */ - if (strchr(parsestring, '@') == NULL) { - copy = mvwm_strdup(parsestring); - goto parse_geometry; - } - copy = mvwm_strdup(parsestring); - copy = strsep(&parsestring, "@"); - *screen_return = parsestring; - geom_str = strsep(©, "@"); - copy = geom_str; + if (strchr(parsestring, '@') == NULL) + { + *screen_return = NULL; + } + else + { + copy = strsep(&parsestring, "@"); + *screen_return = parsestring; + geom_str = strsep(©, "@"); + copy = geom_str; + } -parse_geometry: /* Do the parsing */ ret = XParseGeometry( copy, x_return, y_return, width_return, height_return); commit c33f3651bbacd257590b784731abe16f2485217f Author: Dominik Vogt <[email protected]> Date: Sun Sep 14 22:32:33 2014 +0100 Optimise previous commit. --- libs/FScreen.c | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/libs/FScreen.c b/libs/FScreen.c index aa6a754..05468ac 100644 --- a/libs/FScreen.c +++ b/libs/FScreen.c @@ -609,27 +609,30 @@ int FScreenParseGeometry( else m = monitor_get_current(); - global_m = monitor_by_name("global"); - - /* adapt geometry to selected screen */ - if (rc & XValue) - { - if (rc & XNegative) - *x_return -= (global_m->coord.w - - m->coord.w - - m->coord.x); - else - *x_return += m->coord.x; - } - if (rc & YValue) + if (rc & (XValue | YValue)) { - if (rc & YNegative) - *y_return -= (global_m->coord.h - - m->coord.h - - m->coord.y); - else - *y_return += m->coord.y; + global_m = monitor_by_name("global"); + /* adapt geometry to selected screen */ + if (rc & XValue) + { + if (rc & XNegative) + *x_return -= (global_m->coord.w - + m->coord.w - + m->coord.x); + else + *x_return += m->coord.x; + } + if (rc & YValue) + { + if (rc & YNegative) + *y_return -= (global_m->coord.h - + m->coord.h - + m->coord.y); + else + *y_return += m->coord.y; + } } + return rc; }
