From 9938de36938107546b2e5b0410cc97d7a01632e7 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 11 May 2003 23:57:56 +0000 Subject: [PATCH] add opaque move/resize to the rc3 --- data/rc3 | 10 ++++++++++ openbox/config.c | 27 +++++++++++++++++++++++++++ openbox/config.h | 10 ++++++++-- openbox/moveresize.c | 31 +++++++++++++++++-------------- 4 files changed, 62 insertions(+), 16 deletions(-) diff --git a/data/rc3 b/data/rc3 index fd16dc93..01c9525e 100644 --- a/data/rc3 +++ b/data/rc3 @@ -38,6 +38,16 @@ # A list of names for the desktops names = ("one" "two" "three" "four") +[moveresize] + +# When true windows are moved opaquely, when false just an outline is shown +# while they are moved +#opaque_move = yes + +# When true windows are resized opaquely, when false just an outline is shown +# while they are resized +#opaque_resize = yes + [theme] # the theme to display diff --git a/openbox/config.c b/openbox/config.c index 959f6c2c..5624c48c 100644 --- a/openbox/config.c +++ b/openbox/config.c @@ -12,6 +12,9 @@ char *config_theme; int config_desktops_num; GSList *config_desktops_names; +gboolean config_opaque_move; +gboolean config_opaque_resize; + static void parse_focus(char *name, ParseToken *value) { if (!g_ascii_strcasecmp(name, "focusnew")) { @@ -96,6 +99,25 @@ static void parse_desktops(char *name, ParseToken *value) parse_free_token(value); } +static void parse_moveresize(char *name, ParseToken *value) +{ + if (!g_ascii_strcasecmp(name, "opaque_move")) { + if (value->type != TOKEN_BOOL) + yyerror("invalid value"); + else { + config_opaque_move = value->data.integer; + } + } else if (!g_ascii_strcasecmp(name, "opaque_resize")) { + if (value->type != TOKEN_BOOL) + yyerror("invalid value"); + else { + config_opaque_resize = value->data.integer; + } + } else + yyerror("invalid option"); + parse_free_token(value); +} + void config_startup() { config_focus_new = TRUE; @@ -114,6 +136,11 @@ void config_startup() config_desktops_names = NULL; parse_reg_section("desktops", NULL, parse_desktops); + + config_opaque_move = TRUE; + config_opaque_resize = TRUE; + + parse_reg_section("moveresize", NULL, parse_moveresize); } void config_shutdown() diff --git a/openbox/config.h b/openbox/config.h index 49e7c44e..c268503a 100644 --- a/openbox/config.h +++ b/openbox/config.h @@ -13,8 +13,14 @@ extern gboolean config_focus_last; extern gboolean config_focus_last_on_desktop; /*! Show a popup dialog while cycling focus */ extern gboolean config_focus_popup; -/*! The number of slits to create */ -extern int config_slit_number; +/*! The number of slits to create + extern int config_slit_number;*/ +/*! When true windows are moved opaquely, when false just an outline is shown + while they are moved */ +extern gboolean config_opaque_move; +/*! When true windows are resize opaquely, when false just an outline is shown + while they are resize */ +extern gboolean config_opaque_resize; /* The name of the theme */ char *config_theme; diff --git a/openbox/moveresize.c b/openbox/moveresize.c index ddaa2762..9a1b4319 100644 --- a/openbox/moveresize.c +++ b/openbox/moveresize.c @@ -6,6 +6,7 @@ #include "dispatch.h" #include "openbox.h" #include "popup.h" +#include "config.h" #include "render/render.h" #include "render/theme.h" @@ -34,9 +35,6 @@ static gboolean first_draw = FALSE; #define POPUP_X (10) #define POPUP_Y (10) -gboolean config_opaque_move = FALSE; -gboolean config_opaque_resize = FALSE; - void moveresize_startup() { XSetWindowAttributes attrib; @@ -203,17 +201,22 @@ static void do_move() client_configure(moveresize_client, Corner_TopLeft, cur_x, cur_y, start_cw, start_ch, TRUE, FALSE); /* draw the new one */ - if (!config_opaque_move) - XDrawRectangle(ob_display, opaque_window.win, opaque_gc, - moveresize_client->frame->area.x, - moveresize_client->frame->area.y, - moveresize_client->frame->area.width - 1, - moveresize_client->frame->area.height - 1); - /* erase the old one */ - if (!config_opaque_move && !first_draw) - XDrawRectangle(ob_display, opaque_window.win, opaque_gc, - oldx, oldy, oldw - 1, oldh - 1); - first_draw = FALSE; + if (moveresize_client->frame->area.x != oldx || + moveresize_client->frame->area.y != oldy || + moveresize_client->frame->area.width != oldw || + moveresize_client->frame->area.height != oldh) { + if (!config_opaque_move) + XDrawRectangle(ob_display, opaque_window.win, opaque_gc, + moveresize_client->frame->area.x, + moveresize_client->frame->area.y, + moveresize_client->frame->area.width - 1, + moveresize_client->frame->area.height - 1); + /* erase the old one */ + if (!config_opaque_move && !first_draw) + XDrawRectangle(ob_display, opaque_window.win, opaque_gc, + oldx, oldy, oldw - 1, oldh - 1); + first_draw = FALSE; + } /* this would be better with a fixed width font ... XXX can do it better if there are 2 text boxes */ -- 2.39.2