From 23bd442354de380e32e9db73e8924f36a5a908c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Neumann?= Date: Mon, 3 Jun 2013 15:07:09 +0200 Subject: dunst: numlock.patch --- x11-misc/dunst/Manifest | 3 +- x11-misc/dunst/dunst-1.0.0.ebuild | 4 + x11-misc/dunst/files/dunst-1.0.0-numlock.patch | 130 +++++++++++++++++++++++++ 3 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 x11-misc/dunst/files/dunst-1.0.0-numlock.patch diff --git a/x11-misc/dunst/Manifest b/x11-misc/dunst/Manifest index bf9a2c0..551f95e 100644 --- a/x11-misc/dunst/Manifest +++ b/x11-misc/dunst/Manifest @@ -1,2 +1,3 @@ +AUX dunst-1.0.0-numlock.patch 5898 SHA256 f48b56b74a7bae8191d0aebc2235677d23a4b26c3cb35266a0e73af4ca1e8b3e SHA512 1ddb9779f09acce1267158fef6e451cc2532c9f4bda7b4fd16ebe08603ea6c3ee05f5aabdace85667dd50ff997c0906ce7c9a17728a0b1f967a5d9ccc0faffd5 WHIRLPOOL 4bffa04c74d0cc392bbb36d6b80f74076a1bd8681d0f801a0f7380eea4937c796f6fcaa77f0488483252c8676f38af44cba77696dfce708d4d4e912d619a1652 DIST dunst-1.0.0.tar.bz2 75306 SHA256 5c79ef11165421a4828453a42dfe9c60a4cb9d8743f970186a90c67e277f5280 SHA512 81490597ef8354d2c32838c72e03b121cf09d61e0fbef697a8adfb0c4783e45b3bb05790bf94cc1d0ed41e7f4b5f13a8edfdc65fec5569dc29966edd0807bfe1 WHIRLPOOL 724295fec6d284cc512944435a93df8c55b214d59d2b2b33c3fbf83e6a51db40b6ca15ce68446988dbeab695b0a907a4301124f35fb6748bed8c8143042b0bd9 -EBUILD dunst-1.0.0.ebuild 1032 SHA256 788c5894046c0fd5eef6d3d3bdbfe42ebd532eb7dbd805f6626399cbd571da6d SHA512 edd37151b948fd7e66ca3f4f24482e314c9878a12bc86f9e04ba6fee6c1e48b6e76dd203b5b97fe042195feb5b5aa4d468f734843f2b2c4662ca4275791ea00c WHIRLPOOL bc86b19f6629482d524274753dfb6323519a24e6554827ebd766df5048b826d79d76758517b9967a4a5d1e042478aa49cf92adc9ba0189919309cc5a1a1fec5f +EBUILD dunst-1.0.0.ebuild 1097 SHA256 cb4a18d62a5f989da62d1a0e8d2d1ec477abee650fc37f191ea92d666ea980af SHA512 419c38b3ed6908c719f9556f48943effea7214644730319a62c48c7c555c331d532ecde90b5a88748625f2695ac1c2951948a5c4406a278dafe9d0eb1f30407b WHIRLPOOL 81a05b2463a84fd15a4ae1053bed80cdf71c859314a19aa090d5f39b0c5ae9692be7a94981040f97ba727541db44921a5faa31983651c76b8b85e3ed90e4bdaf diff --git a/x11-misc/dunst/dunst-1.0.0.ebuild b/x11-misc/dunst/dunst-1.0.0.ebuild index d43798a..3e7ac00 100644 --- a/x11-misc/dunst/dunst-1.0.0.ebuild +++ b/x11-misc/dunst/dunst-1.0.0.ebuild @@ -4,6 +4,8 @@ EAPI=5 +inherit eutils + DESCRIPTION="customizable and lightweight notification-daemon" HOMEPAGE="http://www.knopwob.org/dunst/" SRC_URI="http://www.knopwob.org/public/dunst-release/${P}.tar.bz2" @@ -37,6 +39,8 @@ src_prepare() { # don't build dunstify: it pulls in deps but is not being installed sed -ie "/^all:/ s:dunstify::" Makefile || die "sed failed" + + epatch "${FILESDIR}"/dunst-1.0.0-numlock.patch } src_install() { diff --git a/x11-misc/dunst/files/dunst-1.0.0-numlock.patch b/x11-misc/dunst/files/dunst-1.0.0-numlock.patch new file mode 100644 index 0000000..e6b4d9a --- /dev/null +++ b/x11-misc/dunst/files/dunst-1.0.0-numlock.patch @@ -0,0 +1,130 @@ +diff --git a/x.c b/x.c +index 2ad74d3..4248082 100644 +--- a/x.c ++++ b/x.c +@@ -458,6 +458,53 @@ static void setopacity(Window win, unsigned long opacity) + + + ++ /* ++ * Returns the modifier which is NumLock. ++ */ ++static KeySym x_numlock_mod() ++{ ++ const KeyCode nl = XKeysymToKeycode(xctx.dpy, XStringToKeysym("Num_Lock")); ++ ++ int mod; ++ KeySym sym = 0; ++ XModifierKeymap * map = XGetModifierMapping(xctx.dpy); ++ ++ for (mod = 0; mod < 8; mod++) { ++ for (int j = 0; j < map->max_keypermod; j++) { ++ if (map->modifiermap[mod*map->max_keypermod+j] == nl) { ++ switch (mod) { ++ case ShiftMapIndex: ++ sym = ShiftMask; ++ break; ++ case LockMapIndex: ++ sym = LockMask; ++ break; ++ case ControlMapIndex: ++ sym = ControlMask; ++ break; ++ case Mod1MapIndex: ++ sym = Mod1Mask; ++ break; ++ case Mod2MapIndex: ++ sym = Mod2Mask; ++ break; ++ case Mod3MapIndex: ++ sym = Mod3Mask; ++ break; ++ case Mod4MapIndex: ++ sym = Mod4Mask; ++ break; ++ case Mod5MapIndex: ++ sym = Mod5Mask; ++ break; ++ } ++ } ++ } ++ } ++ ++ XFreeModifiermap(map); ++ return sym; ++} + + /* + * Helper function to use glib's mainloop mechanic +@@ -488,6 +535,7 @@ gboolean x_mainloop_fd_dispatch(GSource * source, GSourceFunc callback, + gpointer user_data) + { + XEvent ev; ++ unsigned int state; + while (XPending(xctx.dpy) > 0) { + XNextEvent(xctx.dpy, &ev); + switch (ev.type) { +@@ -508,10 +556,13 @@ gboolean x_mainloop_fd_dispatch(GSource * source, GSourceFunc callback, + } + break; + case KeyPress: ++ state = ev.xkey.state; ++ /* NumLock is also encoded in the state. Remove it. */ ++ state &= ~x_numlock_mod(); + if (settings.close_ks.str + && XLookupKeysym(&ev.xkey, + 0) == settings.close_ks.sym +- && settings.close_ks.mask == ev.xkey.state) { ++ && settings.close_ks.mask == state) { + if (displayed) { + notification *n = g_queue_peek_head(displayed); + if (n) +@@ -521,19 +572,19 @@ gboolean x_mainloop_fd_dispatch(GSource * source, GSourceFunc callback, + if (settings.history_ks.str + && XLookupKeysym(&ev.xkey, + 0) == settings.history_ks.sym +- && settings.history_ks.mask == ev.xkey.state) { ++ && settings.history_ks.mask == state) { + history_pop(); + } + if (settings.close_all_ks.str + && XLookupKeysym(&ev.xkey, + 0) == settings.close_all_ks.sym +- && settings.close_all_ks.mask == ev.xkey.state) { ++ && settings.close_all_ks.mask == state) { + move_all_to_history(); + } + if (settings.context_ks.str + && XLookupKeysym(&ev.xkey, + 0) == settings.context_ks.sym +- && settings.context_ks.mask == ev.xkey.state) { ++ && settings.context_ks.mask == state) { + context_menu(); + } + break; +@@ -926,9 +977,12 @@ int x_shortcut_grab(keyboard_shortcut * ks) + + x_shortcut_setup_error_handler(); + +- if (ks->is_valid) ++ if (ks->is_valid) { + XGrabKey(xctx.dpy, ks->code, ks->mask, root, + true, GrabModeAsync, GrabModeAsync); ++ XGrabKey(xctx.dpy, ks->code, ks->mask | x_numlock_mod() , root, ++ true, GrabModeAsync, GrabModeAsync); ++ } + + if (x_shortcut_tear_down_error_handler()) { + fprintf(stderr, "Unable to grab key \"%s\"\n", ks->str); +@@ -945,8 +999,10 @@ void x_shortcut_ungrab(keyboard_shortcut * ks) + { + Window root; + root = RootWindow(xctx.dpy, DefaultScreen(xctx.dpy)); +- if (ks->is_valid) ++ if (ks->is_valid) { + XUngrabKey(xctx.dpy, ks->code, ks->mask, root); ++ XUngrabKey(xctx.dpy, ks->code, ks->mask | x_numlock_mod(), root); ++ } + } + + /* -- cgit v1.2.3