aboutsummaryrefslogtreecommitdiff
path: root/debian
diff options
context:
space:
mode:
Diffstat (limited to 'debian')
-rw-r--r--debian/changelog10
l---------debian/images/us,basic.png1
-rw-r--r--debian/images/us,dvorak.pngbin0 -> 574 bytes
-rw-r--r--debian/install1
-rw-r--r--debian/patches/fbxkb-stackrpms.patch201
-rw-r--r--debian/patches/series1
-rw-r--r--debian/source/include-binaries1
7 files changed, 215 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog
index 0c3bf08..8c179ef 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,13 @@
+fbxkb (0.6-3+stackrpms1) unstable; urgency=high
+
+ * Fork to stackrpms release
+ * Swap left and middle click operations
+ * Enable rotating input methods on scrollwheel scrolling action
+ * Add variant support
+ * Add tooltip
+
+ -- B. Stack <bgstack15@gmail.com> Mon, 10 Oct 2022 09:47:38 -0400
+
fbxkb (0.6-3) unstable; urgency=medium
[ Andreas Beckmann ]
diff --git a/debian/images/us,basic.png b/debian/images/us,basic.png
new file mode 120000
index 0000000..ea19c57
--- /dev/null
+++ b/debian/images/us,basic.png
@@ -0,0 +1 @@
+us.png \ No newline at end of file
diff --git a/debian/images/us,dvorak.png b/debian/images/us,dvorak.png
new file mode 100644
index 0000000..935a08e
--- /dev/null
+++ b/debian/images/us,dvorak.png
Binary files differ
diff --git a/debian/install b/debian/install
new file mode 100644
index 0000000..b36f40e
--- /dev/null
+++ b/debian/install
@@ -0,0 +1 @@
+debian/images/* usr/share/fbxkb/images
diff --git a/debian/patches/fbxkb-stackrpms.patch b/debian/patches/fbxkb-stackrpms.patch
new file mode 100644
index 0000000..1912b0d
--- /dev/null
+++ b/debian/patches/fbxkb-stackrpms.patch
@@ -0,0 +1,201 @@
+Message: stackrpms customizations to fbxkb
+Author: bgstack15
+Date: 2022-10-10
+Version: 0.6
+diff --git a/.gitignore b/.gitignore
+new file mode 100644
+index 0000000..3a9bccc
+--- /dev/null
++++ b/.gitignore
+@@ -0,0 +1,8 @@
++.*.swp
++*.o
++config.h
++man/*.gz
++*.dep
++fbxkb
++fbxkb.c.*
++Makefile.config
+diff --git a/fbxkb.c b/fbxkb.c
+index 2341464..fb5f665 100644
+--- a/fbxkb.c
++++ b/fbxkb.c
+@@ -170,7 +170,7 @@ app_menu_about(GtkWidget *widget, gpointer data)
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_CLOSE,
+- "fbxkb %s\nX11 Keyboard switcher\nAuthor: Anatoly Asviyan <aanatoly@users.sf.net>", version);
++ "fbxkb %s\nX11 Keyboard switcher\nOriginal author: Anatoly Asviyan <aanatoly@users.sf.net>\ncustomized for stackrpms by bgstack15", version);
+ /* Destroy the dialog when the user responds to it (e.g. clicks a button) */
+ g_signal_connect_swapped (about_dialog, "response",
+ G_CALLBACK (gtk_widget_hide),
+@@ -205,6 +205,12 @@ static void docklet_destroyed(GtkWidget *widget, void *data)
+ RET();
+ }
+
++int scroll_input_method(int no) {
++ no = (cur_group + no) % ngroups;
++ DBG("no=%d\n", no);
++ XkbLockGroup(dpy, XkbUseCoreKbd, no);
++ return no;
++}
+
+ void docklet_clicked(GtkWidget *button, GdkEventButton *event, void *data)
+ {
+@@ -213,13 +219,9 @@ void docklet_clicked(GtkWidget *button, GdkEventButton *event, void *data)
+ if (event->type != GDK_BUTTON_PRESS)
+ RET();
+
+- if (event->button == 1) {
+- int no;
+-
+- no = (cur_group + 1) % ngroups;
+- DBG("no=%d\n", no);
+- XkbLockGroup(dpy, XkbUseCoreKbd, no);
+- } else if (event->button == 2) {
++ if (event->button == 2) {
++ scroll_input_method(1);
++ } else if (event->button == 1) {
+ gtk_menu_popup(GTK_MENU(flag_menu), NULL, NULL, NULL, NULL, event->button, event->time);
+ } else if (event->button == 3) {
+ gtk_menu_popup(GTK_MENU(app_menu), NULL, NULL, NULL, NULL, event->button, event->time);
+@@ -227,6 +229,26 @@ void docklet_clicked(GtkWidget *button, GdkEventButton *event, void *data)
+ RET();
+ }
+
++void docklet_scrolled(GtkWidget *button, GdkEventScroll *event, void *data) {
++ char *i = NULL;
++ int no = 0;
++ switch (event->direction) {
++ case GDK_SCROLL_UP:
++ case GDK_SCROLL_LEFT:
++ i = "up";
++ no = -1;
++ break;
++ case GDK_SCROLL_DOWN:
++ case GDK_SCROLL_RIGHT:
++ i = "down";
++ no = 1;
++ break;
++ }
++ if (i) {
++ scroll_input_method(no);
++ }
++}
++
+ static int
+ docklet_create()
+ {
+@@ -240,6 +262,7 @@ docklet_create()
+ g_signal_connect(G_OBJECT(docklet), "embedded", G_CALLBACK(docklet_embedded), NULL);
+ g_signal_connect(G_OBJECT(docklet), "destroy", G_CALLBACK(docklet_destroyed), NULL);
+ g_signal_connect(G_OBJECT(box), "button-press-event", G_CALLBACK(docklet_clicked), NULL);
++ g_signal_connect(G_OBJECT(docklet), "scroll-event", G_CALLBACK(docklet_scrolled), NULL);
+
+ gtk_container_set_border_width(GTK_CONTAINER(box), 0);
+
+@@ -257,7 +280,7 @@ docklet_create()
+ static gboolean
+ my_str_equal (gchar *a, gchar *b)
+ {
+- return (a[0] == b[0] && a[1] == b[1]);
++ return strcmp(a,b) == 0;
+ }
+
+
+@@ -273,10 +296,12 @@ sym2flag(char *sym)
+ if (flag)
+ RET(flag);
+
+- if (!s)
+- s = g_string_new(IMGPREFIX "tt.png");
+- s->str[s->len-6] = sym[0];
+- s->str[s->len-5] = sym[1];
++ if (!s)
++ s = g_string_new(IMGPREFIX);
++ else
++ s = g_string_assign(s,IMGPREFIX);
++ s = g_string_append(s, sym);
++ s = g_string_append(s, ".png");
+ flag = gdk_pixbuf_new_from_file_at_size(s->str, 24, 24, NULL);
+ if (!flag)
+ RET(zzflag);
+@@ -341,7 +366,7 @@ read_kbd_description()
+
+ // parse kbd info
+ if (sym_name_atom != None) {
+- char *sym_name, *tmp, *tok;
++ char *sym_name, *tmp, *tok, *tmp2, *tmp3;
+ int no;
+
+ sym_name = XGetAtomName(dpy, sym_name_atom);
+@@ -352,6 +377,7 @@ read_kbd_description()
+ * 150 pc/pc(pc101)+pc/us+pc/ru(phonetic):2+group(shift_toggle)
+ * 470 pc(pc105)+us+ru(phonetic):2+il(phonetic):3+group(shifts_toggle)+group(switch)
+ */
++ tmp3 = malloc(30 * sizeof(char));
+ DBG("sym_name=%s\n", sym_name);
+ for (tok = strtok(sym_name, "+"); tok; tok = strtok(NULL, "+")) {
+ DBG("tok=%s\n", tok);
+@@ -364,6 +390,13 @@ read_kbd_description()
+ } else {
+ no = 0;
+ }
++ if((tmp2 = strchr(tok, '('))) {
++ // these next two statements could be done cleverly in one statement but the compiler warns if you try it.
++ // strip left paren, and then right paren
++ tmp2++;
++ tmp2[strlen(tmp2)-1] = '\0';
++ }
++ DBG("tmp2=%s\n", tmp2);
+ for (tmp = tok; isalpha(*tmp); tmp++);
+ *tmp = 0;
+
+@@ -375,9 +408,18 @@ read_kbd_description()
+ if (group2info[no].sym != NULL) {
+ ERR("xkb group #%d is already defined\n", no);
+ }
+- group2info[no].sym = g_strdup(tok);
+- group2info[no].flag = sym2flag(tok);
++ strcpy(tmp3, tok);
++ if (tmp2 != 0) {
++ strcat(tmp3,",");
++ // add variant to end of string for the png lookup
++ strcat(tmp3,tmp2);
++ *tmp2 = 0;
++ }
++ DBG("tmp3=%s\n",tmp3);
++ group2info[no].sym = g_strdup(tmp3);
++ group2info[no].flag = sym2flag(tmp3);
+ group2info[no].name = XGetAtomName(dpy, kbd_desc_ptr->names->groups[no]);
++ *tmp3 = 0;
+ }
+ XFree(sym_name);
+ }
+@@ -412,6 +454,7 @@ static void update_flag(int no)
+ g_assert(k != NULL);
+ DBG("k->sym=%s\n", k->sym);
+ gtk_image_set_from_pixbuf(GTK_IMAGE(image), k->flag);
++ gtk_widget_set_tooltip_text(docklet, k->name);
+ RET();
+ }
+
+@@ -430,8 +473,9 @@ filter( XEvent *xev, GdkEvent *event, gpointer data)
+ if (xkbev->any.xkb_type == XkbStateNotify) {
+ DBG("XkbStateNotify: %d\n", xkbev->state.group);
+ cur_group = xkbev->state.group;
+- if (cur_group < ngroups)
++ if (cur_group < ngroups) {
+ update_flag(cur_group);
++ }
+ } else if (xkbev->any.xkb_type == XkbNewKeyboardNotify) {
+ DBG("XkbNewKeyboardNotify\n");
+ read_kbd_description();
+diff --git a/images/us,basic.png b/images/us,basic.png
+new file mode 120000
+index 0000000..ea19c57
+--- /dev/null
++++ b/images/us,basic.png
+@@ -0,0 +1 @@
++us.png
+\ No newline at end of file
diff --git a/debian/patches/series b/debian/patches/series
index 57e85e0..f867a6f 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -8,3 +8,4 @@ respect-dpkg-buildflags.patch
drop-extra-deps.patch
fix-for-dh.patch
cross.patch
+fbxkb-stackrpms.patch
diff --git a/debian/source/include-binaries b/debian/source/include-binaries
new file mode 100644
index 0000000..20e2a78
--- /dev/null
+++ b/debian/source/include-binaries
@@ -0,0 +1 @@
+debian/images/us,dvorak.png
bgstack15