diff options
-rw-r--r-- | config/config.c | 1 | ||||
-rw-r--r-- | doc/rofi-manpage.markdown | 4 | ||||
-rw-r--r-- | doc/rofi.1 | 8 | ||||
-rw-r--r-- | include/settings.h | 2 | ||||
-rw-r--r-- | include/textbox.h | 18 | ||||
-rw-r--r-- | include/x11-helper.h | 11 | ||||
-rw-r--r-- | source/dialogs/window.c | 37 | ||||
-rw-r--r-- | source/history.c | 2 | ||||
-rw-r--r-- | source/view.c | 38 | ||||
-rw-r--r-- | source/x11-helper.c | 50 | ||||
-rw-r--r-- | source/xrmoptions.c | 161 |
11 files changed, 229 insertions, 103 deletions
diff --git a/config/config.c b/config/config.c index 756e59c2..d33a8303 100644 --- a/config/config.c +++ b/config/config.c @@ -125,4 +125,5 @@ Settings config = { .threads = 1, .scrollbar_width = 8, .scroll_method = 0, + .fake_background = "screenshot", }; diff --git a/doc/rofi-manpage.markdown b/doc/rofi-manpage.markdown index 37d03c6c..78865739 100644 --- a/doc/rofi-manpage.markdown +++ b/doc/rofi-manpage.markdown @@ -589,6 +589,10 @@ simultaneously. This is useful when running **rofi** from a keybinding daemon. Enable fake transparency. This only works with transparent background color in the theme, not the opacity setting. +`-fake-background` + +Select what to use as background for fake transparency. This can be 'background' or 'screenshot' + ### Debug @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "ROFI\-MANPAGE" "" "April 2016" "" "" +.TH "ROFI\-MANPAGE" "" "May 2016" "" "" . .SH "NAME" \fBrofi\fR \- A window switcher, run launcher, ssh dialog and dmenu replacement @@ -932,6 +932,12 @@ Make \fBrofi\fR create a pid file and check this on startup\. Avoiding multiple .P Enable fake transparency\. This only works with transparent background color in the theme, not the opacity setting\. . +.P +\fB\-fake\-background\fR +. +.P +Select what to use as background for fake transparency\. This can be \'background\' or \'screenshot\' +. .SS "Debug" \fB\-no\-config\fR . diff --git a/include/settings.h b/include/settings.h index 2633354a..cb741a1d 100644 --- a/include/settings.h +++ b/include/settings.h @@ -127,6 +127,8 @@ typedef struct unsigned int threads; unsigned int scrollbar_width; unsigned int scroll_method; + /** Background type */ + char *fake_background; } Settings; /** Global Settings structure. */ extern Settings config; diff --git a/include/textbox.h b/include/textbox.h index e1d608e1..3d3b8d09 100644 --- a/include/textbox.h +++ b/include/textbox.h @@ -38,15 +38,15 @@ typedef struct typedef enum { - TB_AUTOHEIGHT = 1 << 0, - TB_AUTOWIDTH = 1 << 1, - TB_LEFT = 1 << 16, - TB_RIGHT = 1 << 17, - TB_CENTER = 1 << 18, - TB_EDITABLE = 1 << 19, - TB_MARKUP = 1 << 20, - TB_WRAP = 1 << 21, - TB_PASSWORD = 1 << 22, + TB_AUTOHEIGHT = 1 << 0, + TB_AUTOWIDTH = 1 << 1, + TB_LEFT = 1 << 16, + TB_RIGHT = 1 << 17, + TB_CENTER = 1 << 18, + TB_EDITABLE = 1 << 19, + TB_MARKUP = 1 << 20, + TB_WRAP = 1 << 21, + TB_PASSWORD = 1 << 22, } TextboxFlags; typedef enum diff --git a/include/x11-helper.h b/include/x11-helper.h index 730724bc..c6704ff4 100644 --- a/include/x11-helper.h +++ b/include/x11-helper.h @@ -38,7 +38,9 @@ void window_set_atom_prop ( xcb_window_t w, xcb_atom_t prop, xcb_atom_t *atoms, X ( I3_SOCKET_PATH ), \ X ( UTF8_STRING ), \ X ( STRING ), \ - X ( WM_WINDOW_ROLE ) + X ( WM_WINDOW_ROLE ), \ + X ( _XROOTPMAP_ID ), \ + X ( ESETROOT_PMAP_ID ) enum { EWMH_ATOMS ( ATOM_ENUM ), NUM_NETATOMS }; @@ -134,5 +136,12 @@ void color_border ( cairo_t *d ); void color_separator ( cairo_t *d ); void x11_helper_set_cairo_rgba ( cairo_t *d, Color col ); + +/** + * Gets a surface containing the background image of the desktop. + * + * @param a cairo surface with the background image of the desktop. + */ +cairo_surface_t * x11_helper_get_bg_surface ( void ); /*@}*/ #endif diff --git a/source/dialogs/window.c b/source/dialogs/window.c index 13a43dee..5b2fd249 100644 --- a/source/dialogs/window.c +++ b/source/dialogs/window.c @@ -470,7 +470,7 @@ static void _window_mode_load_data ( Mode *sw, unsigned int cd ) ( ( c->title != NULL ) ? strlen ( c->title ) : 0 ) + ( c->class ? strlen ( c->class ) : 0 ) + classfield + 50; char *line = g_malloc ( len ); if ( !pd->config_i3_mode ) { - uint32_t wmdesktop = 0; + uint32_t wmdesktop = 0; // find client's desktop. xcb_get_property_cookie_t cookie; xcb_get_property_reply_t *r; @@ -482,7 +482,7 @@ static void _window_mode_load_data ( Mode *sw, unsigned int cd ) if ( r && r->type == XCB_ATOM_CARDINAL ) { wmdesktop = *( (uint32_t *) xcb_get_property_value ( r ) ); } - if ( r && r->type != XCB_ATOM_CARDINAL) { + if ( r && r->type != XCB_ATOM_CARDINAL ) { // Assume the client is on all desktops. wmdesktop = 0xFFFFFFFF; } @@ -544,31 +544,32 @@ static ModeMode window_mode_result ( Mode *sw, int mretv, G_GNUC_UNUSED char **i if ( rmpd->config_i3_mode ) { // Hack for i3. i3_support_focus_window ( rmpd->ids->array[selected_line] ); - } else { + } + else { // Get the current desktop. - unsigned int current_desktop = 0; - xcb_get_property_cookie_t c = xcb_ewmh_get_current_desktop ( &xcb->ewmh, xcb->screen_nbr ); + unsigned int current_desktop = 0; + xcb_get_property_cookie_t c = xcb_ewmh_get_current_desktop ( &xcb->ewmh, xcb->screen_nbr ); if ( !xcb_ewmh_get_current_desktop_reply ( &xcb->ewmh, c, ¤t_desktop, NULL ) ) { current_desktop = 0; } // Get the desktop of the client to switch to - uint32_t wmdesktop = 0; + uint32_t wmdesktop = 0; xcb_get_property_cookie_t cookie; xcb_get_property_reply_t *r; - cookie = xcb_get_property (xcb->connection, - 0, - rmpd->ids->array[selected_line], - xcb->ewmh._NET_WM_DESKTOP, - XCB_ATOM_CARDINAL, - 0, - 1); + cookie = xcb_get_property ( xcb->connection, + 0, + rmpd->ids->array[selected_line], + xcb->ewmh._NET_WM_DESKTOP, + XCB_ATOM_CARDINAL, + 0, + 1 ); r = xcb_get_property_reply ( xcb->connection, cookie, NULL ); if ( r && r->type == XCB_ATOM_CARDINAL ) { wmdesktop = *( (uint32_t *) xcb_get_property_value ( r ) ); } - if ( r && r->type != XCB_ATOM_CARDINAL) { + if ( r && r->type != XCB_ATOM_CARDINAL ) { // Assume the client is on all desktops. wmdesktop = current_desktop; } @@ -576,10 +577,10 @@ static ModeMode window_mode_result ( Mode *sw, int mretv, G_GNUC_UNUSED char **i // If we have to switch the desktop, do if ( wmdesktop != current_desktop ) { - xcb_ewmh_request_change_current_desktop(&xcb->ewmh, - xcb->screen_nbr, - wmdesktop, - XCB_CURRENT_TIME); + xcb_ewmh_request_change_current_desktop ( &xcb->ewmh, + xcb->screen_nbr, + wmdesktop, + XCB_CURRENT_TIME ); } // Activate the window diff --git a/source/history.c b/source/history.c index 07baef32..3b2de37a 100644 --- a/source/history.c +++ b/source/history.c @@ -99,7 +99,7 @@ static _element ** __history_get_element_list ( FILE *fd, unsigned int *length ) continue; } start++; - if ( (l - (start-buffer)) < 3) { + if ( ( l - ( start - buffer ) ) < 3 ) { continue; } // Resize and check. diff --git a/source/view.c b/source/view.c index a3d50cc6..99548077 100644 --- a/source/view.c +++ b/source/view.c @@ -517,18 +517,29 @@ static void check_is_ascii ( thread_state *t, G_GNUC_UNUSED gpointer user_data ) static void rofi_view_setup_fake_transparency ( void ) { if ( CacheState.fake_bg == NULL ) { - cairo_surface_t *s = cairo_xcb_surface_create ( xcb->connection, - xcb_stuff_get_root_window ( xcb ), - root_visual, - xcb->screen->width_in_pixels, - xcb->screen->height_in_pixels ); - - CacheState.fake_bg = cairo_image_surface_create ( CAIRO_FORMAT_ARGB32, CacheState.mon.w, CacheState.mon.h ); - cairo_t *dr = cairo_create ( CacheState.fake_bg ); - cairo_set_source_surface ( dr, s, -CacheState.mon.x, -CacheState.mon.y ); - cairo_paint ( dr ); - cairo_destroy ( dr ); - cairo_surface_destroy ( s ); + cairo_surface_t *s = NULL; + /** + * Select Background to use for fake transparency. + * Current options: 'screenshot','background' + */ + if ( g_strcmp0 ( config.fake_background, "screenshot" ) == 0 ) { + s = cairo_xcb_surface_create ( xcb->connection, + xcb_stuff_get_root_window ( xcb ), + root_visual, + xcb->screen->width_in_pixels, + xcb->screen->height_in_pixels ); + } + else if ( g_strcmp0 ( config.fake_background, "background" ) == 0 ) { + s = x11_helper_get_bg_surface (); + } + if ( s != NULL ) { + CacheState.fake_bg = cairo_image_surface_create ( CAIRO_FORMAT_ARGB32, CacheState.mon.w, CacheState.mon.h ); + cairo_t *dr = cairo_create ( CacheState.fake_bg ); + cairo_set_source_surface ( dr, s, -CacheState.mon.x, -CacheState.mon.y ); + cairo_paint ( dr ); + cairo_destroy ( dr ); + cairo_surface_destroy ( s ); + } TICK_N ( "Fake transparency" ); } } @@ -612,7 +623,6 @@ void __create_window ( MenuFlags menu_flags ) } } - /** * @param state Internal state of the menu. * @@ -1806,7 +1816,7 @@ void rofi_view_workers_initialize ( void ) } // If error occured during setup of pool, tell user and exit. if ( error != NULL ) { - fprintf ( stderr, "Failed to setup thread pool: '%s'", error->message ); + fprintf ( stderr, "Failed to setup thread pool: '%s'", error->message ); g_error_free ( error ); exit ( EXIT_FAILURE ); } diff --git a/source/x11-helper.c b/source/x11-helper.c index 9ccb5871..b6c0b232 100644 --- a/source/x11-helper.c +++ b/source/x11-helper.c @@ -33,6 +33,7 @@ #include <stdint.h> #include <glib.h> #include <cairo.h> +#include <cairo-xcb.h> #include <xcb/xcb.h> #include <xcb/xinerama.h> @@ -83,6 +84,47 @@ xcb_atom_t netatoms[NUM_NETATOMS]; const char *netatom_names[] = { EWMH_ATOMS ( ATOM_CHAR ) }; static unsigned int x11_mod_masks[NUM_X11MOD]; +static xcb_pixmap_t get_root_pixmap ( xcb_connection_t *c, + xcb_screen_t *screen, + xcb_atom_t atom ) +{ + xcb_get_property_cookie_t cookie; + xcb_get_property_reply_t *reply; + xcb_pixmap_t *rootpixmap = NULL; + + cookie = xcb_get_property ( c, + 0, + screen->root, + atom, + XCB_ATOM_PIXMAP, + 0, + 1 ); + + reply = xcb_get_property_reply ( c, cookie, NULL ); + + if ( reply && + ( xcb_get_property_value_length ( reply ) == sizeof ( xcb_pixmap_t ) ) ) { + rootpixmap = (xcb_pixmap_t *) xcb_get_property_value ( reply ); + } + else { + *rootpixmap = XCB_NONE; + } + + free ( reply ); + + return *rootpixmap; +} + +cairo_surface_t * x11_helper_get_bg_surface ( void ) +{ + xcb_pixmap_t pm = get_root_pixmap ( xcb->connection, xcb->screen, netatoms[ESETROOT_PMAP_ID] ); + if ( pm == XCB_NONE ) { + return NULL; + } + return cairo_xcb_surface_create ( xcb->connection, pm, root_visual, + xcb->screen->width_in_pixels, xcb->screen->height_in_pixels ); +} + // retrieve a text property from a window // technically we could use window_get_prop(), but this is better for character set support char* window_get_text_prop ( xcb_window_t w, xcb_atom_t atom ) @@ -300,12 +342,12 @@ void monitor_active ( workarea *mon ) free ( r ); free ( t ); return; - } else if ( config.monitor == -4 ){ + } + else if ( config.monitor == -4 ) { monitor_dimensions ( t->dst_x, t->dst_y, mon ); - free(r); - free(t); + free ( r ); + free ( t ); return; - } } free ( r ); diff --git a/source/xrmoptions.c b/source/xrmoptions.c index 41d40495..d9d82b14 100644 --- a/source/xrmoptions.c +++ b/source/xrmoptions.c @@ -63,62 +63,113 @@ typedef struct * Currently supports string, boolean and number (signed and unsigned). */ static XrmOption xrmOptions[] = { - { xrm_String, "switchers", { .str = &config.modi }, NULL, "" }, - { xrm_String, "modi", { .str = &config.modi }, NULL, "Enabled modi" }, - { xrm_Number, "opacity", { .num = &config.window_opacity }, NULL, "Window opacity" }, - { xrm_SNumber, "width", { .snum = &config.menu_width }, NULL, "Window width" }, - { xrm_Number, "lines", { .num = &config.menu_lines }, NULL, "Number of lines" }, - { xrm_Number, "columns", { .num = &config.menu_columns }, NULL, "Number of columns" }, - - { xrm_String, "font", { .str = &config.menu_font }, NULL, "Font to use" }, - { xrm_String, "color-normal", { .str = &config.color_normal }, NULL, "Color scheme for normal row" }, - { xrm_String, "color-urgent", { .str = &config.color_urgent }, NULL, "Color scheme for urgent row" }, - { xrm_String, "color-active", { .str = &config.color_active }, NULL, "Color scheme for active row" }, - { xrm_String, "color-window", { .str = &config.color_window }, NULL, "Color scheme window" }, - - { xrm_Number, "borderwidth", { .num = &config.menu_bw }, NULL, "" }, - { xrm_Number, "bw", { .num = &config.menu_bw }, NULL, "Border width" }, - - { xrm_Number, "location", { .num = &config.location }, NULL, "Location on screen" }, - - { xrm_Number, "padding", { .num = &config.padding }, NULL, "Padding" }, - { xrm_SNumber, "yoffset", { .snum = &config.y_offset }, NULL, "Y-offset relative to location" }, - { xrm_SNumber, "xoffset", { .snum = &config.x_offset }, NULL, "X-offset relative to location" }, - { xrm_Boolean, "fixed-num-lines", { .num = &config.fixed_num_lines }, NULL, "Always show number of lines" }, - - { xrm_String, "terminal", { .str = &config.terminal_emulator }, NULL, "Terminal to use" }, - { xrm_String, "ssh-client", { .str = &config.ssh_client }, NULL, "Ssh client to use" }, - { xrm_String, "ssh-command", { .str = &config.ssh_command }, NULL, "Ssh command to execute" }, - { xrm_String, "run-command", { .str = &config.run_command }, NULL, "Run command to execute" }, - { xrm_String, "run-list-command", { .str = &config.run_list_command }, NULL, "Command to get extra run targets" }, - { xrm_String, "run-shell-command", { .str = &config.run_shell_command }, NULL, "Run command to execute that runs in shell" }, - - { xrm_Boolean, "disable-history", { .num = &config.disable_history }, NULL, "Disable history in run/ssh" }, - { xrm_Boolean, "levenshtein-sort", { .num = &config.levenshtein_sort }, NULL, "Use levenshtein sorting" }, - { xrm_Boolean, "case-sensitive", { .num = &config.case_sensitive }, NULL, "Set case-sensitivity" }, - { xrm_Boolean, "sidebar-mode", { .num = &config.sidebar_mode }, NULL, "Enable sidebar-mode" }, - { xrm_SNumber, "eh", { .snum = &config.element_height }, NULL, "Row height (in chars)" }, - { xrm_Boolean, "auto-select", { .num = &config.auto_select }, NULL, "Enable auto select mode" }, - { xrm_Boolean, "parse-hosts", { .num = &config.parse_hosts }, NULL, "Parse hosts file for ssh mode" }, - { xrm_Boolean, "parse-known-hosts", { .num = &config.parse_known_hosts }, NULL, "Parse known_hosts file for ssh mode" }, - { xrm_String, "combi-modi", { .str = &config.combi_modi }, NULL, "Set the modi to combine in combi mode" }, - { xrm_Boolean, "fuzzy", { .num = &config.fuzzy }, NULL, "Do a more fuzzy matching" }, - { xrm_Boolean, "glob", { .num = &config.glob }, NULL, "Use glob matching" }, - { xrm_Boolean, "regex", { .num = &config.regex }, NULL, "Use regex matching" }, - { xrm_Boolean, "tokenize", { .num = &config.tokenize }, NULL, "Tokenize input string" }, - { xrm_Number, "monitor", { .snum = &config.monitor }, NULL, "" }, + { xrm_String, "switchers", { .str = &config.modi }, NULL, + "" }, + { xrm_String, "modi", { .str = &config.modi }, NULL, + "Enabled modi" }, + { xrm_Number, "opacity", { .num = &config.window_opacity }, NULL, + "Window opacity" }, + { xrm_SNumber, "width", { .snum = &config.menu_width }, NULL, + "Window width" }, + { xrm_Number, "lines", { .num = &config.menu_lines }, NULL, + "Number of lines" }, + { xrm_Number, "columns", { .num = &config.menu_columns }, NULL, + "Number of columns" }, + + { xrm_String, "font", { .str = &config.menu_font }, NULL, + "Font to use" }, + { xrm_String, "color-normal", { .str = &config.color_normal }, NULL, + "Color scheme for normal row" }, + { xrm_String, "color-urgent", { .str = &config.color_urgent }, NULL, + "Color scheme for urgent row" }, + { xrm_String, "color-active", { .str = &config.color_active }, NULL, + "Color scheme for active row" }, + { xrm_String, "color-window", { .str = &config.color_window }, NULL, + "Color scheme window" }, + + { xrm_Number, "borderwidth", { .num = &config.menu_bw }, NULL, + "" }, + { xrm_Number, "bw", { .num = &config.menu_bw }, NULL, + "Border width" }, + + { xrm_Number, "location", { .num = &config.location }, NULL, + "Location on screen" }, + + { xrm_Number, "padding", { .num = &config.padding }, NULL, + "Padding" }, + { xrm_SNumber, "yoffset", { .snum = &config.y_offset }, NULL, + "Y-offset relative to location" }, + { xrm_SNumber, "xoffset", { .snum = &config.x_offset }, NULL, + "X-offset relative to location" }, + { xrm_Boolean, "fixed-num-lines", { .num = &config.fixed_num_lines }, NULL, + "Always show number of lines" }, + + { xrm_String, "terminal", { .str = &config.terminal_emulator }, NULL, + "Terminal to use" }, + { xrm_String, "ssh-client", { .str = &config.ssh_client }, NULL, + "Ssh client to use" }, + { xrm_String, "ssh-command", { .str = &config.ssh_command }, NULL, + "Ssh command to execute" }, + { xrm_String, "run-command", { .str = &config.run_command }, NULL, + "Run command to execute" }, + { xrm_String, "run-list-command", { .str = &config.run_list_command }, NULL, + "Command to get extra run targets" }, + { xrm_String, "run-shell-command", { .str = &config.run_shell_command }, NULL, + "Run command to execute that runs in shell" }, + + { xrm_Boolean, "disable-history", { .num = &config.disable_history }, NULL, + "Disable history in run/ssh" }, + { xrm_Boolean, "levenshtein-sort", { .num = &config.levenshtein_sort }, NULL, + "Use levenshtein sorting" }, + { xrm_Boolean, "case-sensitive", { .num = &config.case_sensitive }, NULL, + "Set case-sensitivity" }, + { xrm_Boolean, "sidebar-mode", { .num = &config.sidebar_mode }, NULL, + "Enable sidebar-mode" }, + { xrm_SNumber, "eh", { .snum = &config.element_height }, NULL, + "Row height (in chars)" }, + { xrm_Boolean, "auto-select", { .num = &config.auto_select }, NULL, + "Enable auto select mode" }, + { xrm_Boolean, "parse-hosts", { .num = &config.parse_hosts }, NULL, + "Parse hosts file for ssh mode" }, + { xrm_Boolean, "parse-known-hosts", { .num = &config.parse_known_hosts }, NULL, + "Parse known_hosts file for ssh mode" }, + { xrm_String, "combi-modi", { .str = &config.combi_modi }, NULL, + "Set the modi to combine in combi mode" }, + { xrm_Boolean, "fuzzy", { .num = &config.fuzzy }, NULL, + "Do a more fuzzy matching" }, + { xrm_Boolean, "glob", { .num = &config.glob }, NULL, + "Use glob matching" }, + { xrm_Boolean, "regex", { .num = &config.regex }, NULL, + "Use regex matching" }, + { xrm_Boolean, "tokenize", { .num = &config.tokenize }, NULL, + "Tokenize input string" }, + { xrm_Number, "monitor", { .snum = &config.monitor }, NULL, + "" }, /* Alias for dmenu compatibility. */ - { xrm_SNumber, "m", { .snum = &config.monitor }, NULL, "Monitor id to show on" }, - { xrm_Number, "line-margin", { .num = &config.line_margin }, NULL, "Margin between rows" }, - { xrm_String, "filter", { .str = &config.filter }, NULL, "Pre-set filter" }, - { xrm_String, "separator-style", { .str = &config.separator_style }, NULL, "Separator style (none, dash, solid)" }, - { xrm_Boolean, "hide-scrollbar", { .num = &config.hide_scrollbar }, NULL, "Hide scroll-bar" }, - { xrm_Boolean, "fullscreen", { .num = &config.fullscreen }, NULL, "Fullscreen" }, - { xrm_Boolean, "fake-transparency", { .num = &config.fake_transparency }, NULL, "Fake transparency" }, - { xrm_SNumber, "dpi", { .snum = &config.dpi }, NULL, "DPI" }, - { xrm_Number, "threads", { .num = &config.threads }, NULL, "Threads to use for string matching" }, - { xrm_Number, "scrollbar-width", { .num = &config.scrollbar_width }, NULL, "Scrollbar width" }, - { xrm_Number, "scroll-method", { .num = &config.scroll_method }, NULL, "Scrolling method. (0: Page, 1: Centered)" } + { xrm_SNumber, "m", { .snum = &config.monitor }, NULL, + "Monitor id to show on" }, + { xrm_Number, "line-margin", { .num = &config.line_margin }, NULL, + "Margin between rows" }, + { xrm_String, "filter", { .str = &config.filter }, NULL, + "Pre-set filter" }, + { xrm_String, "separator-style", { .str = &config.separator_style }, NULL, + "Separator style (none, dash, solid)" }, + { xrm_Boolean, "hide-scrollbar", { .num = &config.hide_scrollbar }, NULL, + "Hide scroll-bar" }, + { xrm_Boolean, "fullscreen", { .num = &config.fullscreen }, NULL, + "Fullscreen" }, + { xrm_Boolean, "fake-transparency", { .num = &config.fake_transparency }, NULL, + "Fake transparency" }, + { xrm_SNumber, "dpi", { .snum = &config.dpi }, NULL, + "DPI" }, + { xrm_Number, "threads", { .num = &config.threads }, NULL, + "Threads to use for string matching" }, + { xrm_Number, "scrollbar-width", { .num = &config.scrollbar_width }, NULL, + "Scrollbar width" }, + { xrm_Number, "scroll-method", { .num = &config.scroll_method }, NULL, + "Scrolling method. (0: Page, 1: Centered)" }, + { xrm_String, "fake-background", { .str = &config.fake_background }, NULL, + "Background to use for fake transparency. (background or screenshot)" }, }; // Dynamic options. |