summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Jennings <mej@kainx.org>2006-10-30 21:12:12 +0000
committerMichael Jennings <mej@kainx.org>2006-10-30 21:12:12 +0000
commit03ceed41a57db1bf8f11db46fc8715bdd8af09a4 (patch)
tree9e2923c679342ebed5475251c4aff77f20c92b04 /src
parent3ccf45d5af38468a46c21c19082acf5e295e772c (diff)
downloadeterm-03ceed41a57db1bf8f11db46fc8715bdd8af09a4.tar.gz
Mon Oct 30 16:11:47 2006 Michael Jennings (mej)
Patch from Jason McCarver <slam@parasite.cc> to support -S/--sticky option for "sticky" (i.e., present on all desktops) startup. ---------------------------------------------------------------------- SVN revision: 26874
Diffstat (limited to 'src')
-rw-r--r--src/options.c9
-rw-r--r--src/options.h1
-rw-r--r--src/startup.c2
-rw-r--r--src/startup.h2
-rw-r--r--src/windows.c6
5 files changed, 20 insertions, 0 deletions
diff --git a/src/options.c b/src/options.c
index 8f44852..802a473 100644
--- a/src/options.c
+++ b/src/options.c
@@ -305,6 +305,7 @@ spifopt_t option_list[] = {
SPIFOPT_BOOL_LONG("blink-brightens-background", "\"blink\" attribute brightens background color", vt_options,
VT_OPTIONS_BLINK_BRIGHTENS_BACKGROUND),
SPIFOPT_BOOL_LONG("colors-suppress-bold", "do not make ANSI colors 0-16 bold", vt_options, VT_OPTIONS_COLORS_SUPPRESS_BOLD),
+ SPIFOPT_BOOL('S', "sticky", "start window sticky", eterm_options, ETERM_OPTIONS_STICKY),
#ifndef NO_MAPALERT
# ifdef MAPALERT_OPTION
SPIFOPT_BOOL('m', "map-alert", "uniconify on beep", vt_options, VT_OPTIONS_MAP_ALERT),
@@ -1278,6 +1279,13 @@ parse_toggles(char *buff, void *state)
BITFIELD_CLEAR(vt_options, VT_OPTIONS_COLORS_SUPPRESS_BOLD);
}
+ } else if (!BEG_STRCASECMP(buff, "sticky ")) {
+ if (bool_val) {
+ BITFIELD_SET(eterm_options, ETERM_OPTIONS_STICKY);
+ } else {
+ BITFIELD_CLEAR(eterm_options, ETERM_OPTIONS_STICKY);
+ }
+
} else {
libast_print_error("Parse error in file %s, line %lu: Attribute \"%s\" is not valid within context toggles\n", file_peek_path(),
file_peek_line(), buff);
@@ -3823,6 +3831,7 @@ save_config(char *path, unsigned char save_theme)
fprintf(fp, " itrans %d\n", (BITFIELD_IS_SET(image_options, IMAGE_OPTIONS_ITRANS) ? 1 : 0));
fprintf(fp, " buttonbar %d\n", ((buttonbar && bbar_is_visible(buttonbar)) ? 1 : 0));
fprintf(fp, " resize_gravity %d\n", (BITFIELD_IS_SET(eterm_options, ETERM_OPTIONS_RESIZE_GRAVITY) ? 1 : 0));
+ fprintf(fp, " sticky %d\n", (BITFIELD_IS_SET(eterm_options, ETERM_OPTIONS_STICKY) ? 1 : 0));
fprintf(fp, "end toggles\n\n");
fprintf(fp, "begin keyboard\n");
diff --git a/src/options.h b/src/options.h
index f158aab..04ea6d2 100644
--- a/src/options.h
+++ b/src/options.h
@@ -61,6 +61,7 @@
# define ETERM_OPTIONS_DOUBLE_BUFFER (1LU << 15)
# define ETERM_OPTIONS_MBYTE_CURSOR (1LU << 16)
# define ETERM_OPTIONS_RESIZE_GRAVITY (1LU << 17)
+# define ETERM_OPTIONS_STICKY (1LU << 18)
# define IMAGE_OPTIONS_TRANS (1U << 0)
# define IMAGE_OPTIONS_ITRANS (1U << 1)
diff --git a/src/startup.c b/src/startup.c
index 145050c..bbece55 100644
--- a/src/startup.c
+++ b/src/startup.c
@@ -153,6 +153,8 @@ eterm_bootstrap(int argc, char *argv[])
props[PROP_EWMH_ICON] = XInternAtom(Xdisplay, "_NET_WM_ICON", False);
props[PROP_EWMH_OPACITY] = XInternAtom(Xdisplay, "_NET_WM_WINDOW_OPACITY", True);
props[PROP_EWMH_STARTUP_ID] = XInternAtom(Xdisplay, "_NET_STARTUP_ID", False);
+ props[PROP_EWMH_STATE] = XInternAtom(Xdisplay, "_NET_WM_STATE", False);
+ props[PROP_EWMH_STATE_STICKY] = XInternAtom(Xdisplay, "_NET_WM_STATE_STICKY", False);
if ((theme_dir = spifconf_parse_theme(&rs_theme, THEME_CFG, PARSE_TRY_ALL)) != NULL) {
char *tmp;
diff --git a/src/startup.h b/src/startup.h
index fc3708c..83b868f 100644
--- a/src/startup.h
+++ b/src/startup.h
@@ -106,6 +106,8 @@ enum {
PROP_EWMH_ICON,
PROP_EWMH_OPACITY,
PROP_EWMH_STARTUP_ID,
+ PROP_EWMH_STATE,
+ PROP_EWMH_STATE_STICKY,
NUM_PROPS
};
diff --git a/src/windows.c b/src/windows.c
index c0c6435..dd45022 100644
--- a/src/windows.c
+++ b/src/windows.c
@@ -498,6 +498,12 @@ Create_Windows(int argc, char *argv[])
XChangeProperty(Xdisplay, TermWin.parent, props[PROP_DESKTOP], XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &val, 1);
}
+ /* Make window sticky if requested */
+ if (BITFIELD_IS_SET(eterm_options, ETERM_OPTIONS_STICKY)) {
+ XChangeProperty(Xdisplay, TermWin.parent, props[PROP_EWMH_STATE], XA_ATOM, 32, PropModeReplace,
+ (unsigned char *) &props[PROP_EWMH_STATE_STICKY], 1);
+ }
+
/* Set startup ID property if given by the launching application. */
if (getenv("DESKTOP_STARTUP_ID")) {
Atom atom;