summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog16
-rw-r--r--src/actions.c18
-rw-r--r--src/data.h4
-rw-r--r--src/input.c18
-rw-r--r--src/input.h2
-rw-r--r--src/main.c4
-rw-r--r--src/manage.c17
7 files changed, 64 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 856aa98..6921789 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2004-04-23 Shawn Betts <sabetts@vcn.bc.ca>
+
+ * src/data.h (struct rp_defaults): new members, font_string,
+ fgcolor_string, bgcolor_string.
+
+ * src/actions.c (set_font): return defaults.font_string when data is NULL
+ (set_fgcolor): likewise for fgcolor_string
+ (set_bgcolor): likewise for bgcolor_string
+
+ * src/manage.c (ungrab_top_level_keys): properly grab capital letters.
+
+ * src/main.c (init_defaults): init fgcolor_string, bgcolor_string, and font_string
+
+ * src/input.c (grab_key): change keysym type to KeySym. convert
+ keysym to keycode. All callers updated.
+
2004-04-18 Shawn Betts <sabetts@vcn.bc.ca>
* src/actions.c (cmd_set): if non-interactive and no arguments are
diff --git a/src/actions.c b/src/actions.c
index cb80a4c..8a004d9 100644
--- a/src/actions.c
+++ b/src/actions.c
@@ -2340,9 +2340,8 @@ set_font (char *data)
{
XFontStruct *font;
- /* FIXME: return a useful string. */
if (data == NULL)
- return xstrdup ("dummy");
+ return xstrdup (defaults.font_string);
font = XLoadQueryFont (dpy, data);
if (font == NULL)
@@ -2356,6 +2355,9 @@ set_font (char *data)
defaults.font = font;
update_all_gcs();
+ free (defaults.font_string);
+ defaults.font_string = xstrdup (data);
+
return NULL;
}
@@ -2559,9 +2561,8 @@ set_fgcolor (char *data)
int i;
XColor color, junk;
- /* FIXME: return a meaningful string. */
if (data == NULL)
- return xstrdup ("dummy");
+ return xstrdup (defaults.fgcolor_string);
for (i=0; i<num_screens; i++)
{
@@ -2577,6 +2578,9 @@ set_fgcolor (char *data)
XSetWindowBorder (dpy, screens[i].input_window, color.pixel);
XSetWindowBorder (dpy, screens[i].frame_window, color.pixel);
XSetWindowBorder (dpy, screens[i].help_window, color.pixel);
+
+ free (defaults.fgcolor_string);
+ defaults.fgcolor_string = xstrdup (data);
}
return NULL;
@@ -2588,9 +2592,8 @@ set_bgcolor (char *data)
int i;
XColor color, junk;
- /* FIXME: return a meaningful string. */
if (data == NULL)
- return xstrdup ("dummy");
+ return xstrdup (defaults.bgcolor_string);
for (i=0; i<num_screens; i++)
{
@@ -2606,6 +2609,9 @@ set_bgcolor (char *data)
XSetWindowBackground (dpy, screens[i].input_window, color.pixel);
XSetWindowBackground (dpy, screens[i].frame_window, color.pixel);
XSetWindowBackground (dpy, screens[i].help_window, color.pixel);
+
+ free (defaults.bgcolor_string);
+ defaults.bgcolor_string = xstrdup (data);
}
return NULL;
diff --git a/src/data.h b/src/data.h
index ec7a303..25bd889 100644
--- a/src/data.h
+++ b/src/data.h
@@ -213,6 +213,10 @@ struct rp_defaults
int padding_bottom;
XFontStruct *font;
+ char *font_string;
+
+ char *fgcolor_string;
+ char *bgcolor_string;
int wait_for_key_cursor;
diff --git a/src/input.c b/src/input.c
index 5b94c78..3b8a954 100644
--- a/src/input.c
+++ b/src/input.c
@@ -164,14 +164,26 @@ update_modifier_map ()
/* Grab the key while ignoring annoying modifier keys including
caps lock, num lock, and scroll lock. */
void
-grab_key (int keycode, unsigned int modifiers, Window grab_window)
+grab_key (KeySym keysym, unsigned int modifiers, Window grab_window)
{
+ int keycode;
unsigned int mod_list[8];
int i;
-
+ KeySym upper, lower;
+
/* Convert to a modifier mask that X Windows will understand. */
modifiers = rp_mask_to_x11_mask (modifiers);
+ /* Make sure we grab the right sym. */
+ XConvertCase (keysym, &lower, &upper);
+ PRINT_DEBUG(("%ld %ld %ld", keysym, lower, upper));
+ if (keysym != upper || keysym != lower)
+ {
+ if (keysym == upper)
+ modifiers |= ShiftMask;
+ keysym = lower;
+ }
+
/* Create a list of all possible combinations of ignored
modifiers. Assumes there are only 3 ignored modifiers. */
mod_list[0] = 0;
@@ -183,6 +195,8 @@ grab_key (int keycode, unsigned int modifiers, Window grab_window)
mod_list[6] = mod_list[2] | mod_list[4];
mod_list[7] = mod_list[1] | mod_list[2] | mod_list[4];
+ keycode = XKeysymToKeycode (dpy, keysym);
+
/* Grab every combination of ignored modifiers. */
for (i=0; i<8; i++)
{
diff --git a/src/input.h b/src/input.h
index f8703e3..149979f 100644
--- a/src/input.h
+++ b/src/input.h
@@ -30,7 +30,7 @@ int read_key (KeySym *keysym, unsigned int *modifiers, char *keysym_name, int le
unsigned int x11_mask_to_rp_mask (unsigned int mask);
unsigned int rp_mask_to_x11_mask (unsigned int mask);
void update_modifier_map ();
-void grab_key (int keycode, unsigned int modifiers, Window grab_window);
+void grab_key (KeySym keysym, unsigned int modifiers, Window grab_window);
void ring_bell ();
diff --git a/src/main.c b/src/main.c
index 26a1309..584b958 100644
--- a/src/main.c
+++ b/src/main.c
@@ -483,6 +483,10 @@ init_defaults ()
fprintf (stderr, "ratpoison: Cannot load font %s.\n", "9x15bold");
exit (EXIT_FAILURE);
}
+ defaults.font_string = xstrdup ("9x15bold");
+
+ defaults.fgcolor_string = xstrdup ("black");
+ defaults.bgcolor_string = xstrdup ("white");
defaults.wait_for_key_cursor = 1;
diff --git a/src/manage.c b/src/manage.c
index 46e174e..b11dc4a 100644
--- a/src/manage.c
+++ b/src/manage.c
@@ -122,7 +122,7 @@ grab_top_level_keys (Window w)
for (i=0; i<map->actions_last; i++)
{
PRINT_DEBUG(("%d\n", i));
- grab_key (XKeysymToKeycode (dpy, map->actions[i].key), map->actions[i].state, w);
+ grab_key (map->actions[i].key, map->actions[i].state, w);
}
#endif
}
@@ -130,23 +130,28 @@ grab_top_level_keys (Window w)
void
ungrab_top_level_keys (Window w)
{
-#ifdef HIDE_MOUSE
-#else
- rp_keymap *map = find_keymap (TOP_KEYMAP);
+ KeySym keysym, upper, lower;
+ rp_keymap *map;
int i;
+ map = find_keymap (TOP_KEYMAP);
+
if (map == NULL)
{
PRINT_ERROR (("Unable to find " TOP_KEYMAP " keymap\n"));
return;
}
+ /* Make sure we ungrab the right sym. */
+
for (i=0; i<map->actions_last; i++)
{
PRINT_DEBUG(("%d\n", i));
- XUngrabKey(dpy, XKeysymToKeycode (dpy, map->actions[i].key), AnyModifier, w);
+ keysym = map->actions[i].key;
+ XConvertCase (keysym, &lower, &upper);
+ keysym = lower;
+ XUngrabKey(dpy, XKeysymToKeycode (dpy, keysym), AnyModifier, w);
}
-#endif
}
void