kwo pushed a commit to branch master.
commit 6b2567ba8fddec5a1a10aeb9ee4a678eade23be9
Author: Kim Woelders <[email protected]>
Date: Sat Mar 16 12:55:45 2013 +0100
Remove gtk1 support, add (mostly working) gtk3 support.
Default is still gtk2.
Gtk3 seems to require quite a lot more memory (twice what is used by
gtk2 ?!?). It also feels a lot slower.
---
Makefile.am | 6 +-
configure.ac | 42 ++--
e16keyedit.h | 38 ++++
ipc.c | 129 ++++++-------
ipc.h | 5 -
menus.c | 26 ++-
menus.h | 6 -
viewer.c | 616 +++++++++++++++++++++++++++++++++++++++--------------------
viewer.h | 4 -
9 files changed, 539 insertions(+), 333 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index 5a70b37..39634e1 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,8 +2,8 @@ AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS = e16keyedit
-e16keyedit_SOURCES = ipc.c ipc.h menus.c menus.h viewer.c viewer.h
+e16keyedit_SOURCES = ipc.c menus.c viewer.c e16keyedit.h
-CPPFLAGS = -D DATADIR=\"$(datadir)\"
+CPPFLAGS = -D DATADIR=\"$(datadir)\" $(GTK_CFLAGS)
-LDADD = $(X_LIBS) -lX11
+LDADD = $(GTK_LIBS) $(X_LIBS) -lX11
diff --git a/configure.ac b/configure.ac
index 2346ad7..731cecf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -14,27 +14,31 @@ AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
+PKG_PROG_PKG_CONFIG
+
dnl Checks for libraries.
-AC_ARG_ENABLE(gtk2,
- [AC_HELP_STRING([--enable-gtk2],[enable gtk2 GUI (instead of GTK1)
[default=yes]])],,
- [enable_gtk2=yes])
-
-if test "x$enable_gtk2" = "xyes" ; then
- pkg_modules="gtk+-2.0 >= 2.0.0"
- PKG_CHECK_MODULES(PACKAGE, [$pkg_modules])
- CFLAGS="$CFLAGS $PACKAGE_CFLAGS"
- LIBS="$LIBS $PACKAGE_LIBS"
- AC_DEFINE(ENABLE_GTK2, , [Define to enable gtk2 support])
-else
- if ! gtk-config --version &> /dev/null ; then
- AC_MSG_ERROR([Gtk+ is required.])
- else
- CFLAGS="$CFLAGS `gtk-config --cflags`"
- LIBS="$LIBS `gtk-config --libs`"
- fi
-fi
+AC_ARG_WITH(gtk,
+ [ --with-gtk Select GTK version to use (auto/gtk2/gtk3)
@<:@default=auto@:>@],,
+ with_gtk=auto)
+
+test_gtk="$with_gtk"
+if test "x$with_gtk" = "xauto" ; then test_gtk="gtk2"; fi
+
+if test "x$test_gtk" = "xgtk2" ; then
+ AC_MSG_CHECKING([for GTK2]);
+ pkg_modules="gtk+-2.0 >= 2.0.0"
+ PKG_CHECK_MODULES(GTK, [$pkg_modules],,
+ [if test "x$with_gtk" = "xauto" ; then test_gtk="gtk3"; fi])
-AC_SUBST(ENABLE_GTK2)
+fi
+if test "x$test_gtk" = "xgtk3" ; then
+ AC_MSG_CHECKING([for GTK3]);
+ pkg_modules="gtk+-3.0 >= 3.0.0"
+ PKG_CHECK_MODULES(GTK, [$pkg_modules])
+fi
+if test "x$GTK_CFLAGS" = "x" ; then
+ AC_MSG_ERROR([GTK 2 or 3 is required.])
+fi
dnl Checks for header files.
AC_PATH_X
diff --git a/e16keyedit.h b/e16keyedit.h
new file mode 100644
index 0000000..efd28d7
--- /dev/null
+++ b/e16keyedit.h
@@ -0,0 +1,38 @@
+#ifndef _E16KEYEDIT_H_
+#define _E16KEYEDIT_H_
+
+#if __GNUC__ /* FIXME - Use autofoo */
+#define __UNUSED__ __attribute__((unused))
+#else
+#define __UNUSED__
+#endif
+
+#if GTK_CHECK_VERSION(3,0,0)
+#define USE_GTK 3
+
+#define gtk_hbox_new(homogeneous, spacing) \
+ gtk_box_new(GTK_ORIENTATION_HORIZONTAL, spacing)
+#define gtk_vbox_new(homogeneous, spacing) \
+ gtk_box_new(GTK_ORIENTATION_VERTICAL, spacing)
+
+#else
+#define USE_GTK 2
+#endif
+
+/* ipc.c */
+extern gint CommsInit(void (*msg_receive_func) (gchar * msg));
+extern void CommsSend(const gchar * s);
+
+/* menus.c */
+extern GtkWidget *CreateBarSubMenu(GtkWidget * menu, const char *szName);
+extern GtkWidget *CreateRightAlignBarSubMenu(GtkWidget * menu,
+ const char *szName);
+extern GtkWidget *CreateMenuItem(GtkWidget * menu, const char *szName,
+ const char *szAccel, const char *szTip,
+ GCallback func, const void *data);
+
+/* viewer.c */
+extern GtkAccelGroup *accel_group;
+void on_exit_application(void);
+
+#endif /* _E16KEYEDIT_H_ */
diff --git a/ipc.c b/ipc.c
index 6ab2cad..02ebb9c 100644
--- a/ipc.c
+++ b/ipc.c
@@ -8,8 +8,11 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include "ipc.h"
-#include "viewer.h"
+
+#include "e16keyedit.h"
+
+#define gdk_window_foreign_new(xwin) \
+ gdk_x11_window_foreign_new_for_display(gdk_display_get_default(), xwin)
typedef struct _client
{
@@ -41,8 +44,8 @@ static Window CommsFindCommsWindow(void);
static gchar *CommsGet(Client ** c, XEvent * ev);
static Client *MakeClient(Window win);
static void ListFreeClient(void *ptr);
-extern gchar in_init;
-extern gint gdk_error_warnings;
+static gchar in_init = 0;
+static gint gdk_error_warnings;
gint
CommsInit(void (*msg_receive_func) (gchar * msg))
@@ -53,6 +56,9 @@ CommsInit(void (*msg_receive_func) (gchar * msg))
CommsSetup();
comms_win = win = CommsFindCommsWindow();
+ if (win == None)
+ return 1;
+
cl = MakeClient(win);
g_snprintf(st, sizeof(st), "%8x", (int)win);
cl->name = g_strdup(st);
@@ -61,10 +67,10 @@ CommsInit(void (*msg_receive_func) (gchar * msg))
gdk_window_add_filter(gdkwin, CommsFilter, NULL);
gdkwin2 = gdk_window_foreign_new(my_win);
gdk_window_add_filter(gdkwin2, CommsFilter, NULL);
- XSelectInput(GDK_DISPLAY(), win,
- StructureNotifyMask | SubstructureNotifyMask);
+ gdk_window_set_events(gdkwin, GDK_STRUCTURE_MASK);
msg_receive_callback = msg_receive_func;
- return 1;
+
+ return 0;
}
void
@@ -80,8 +86,10 @@ CommsSend(const gchar * s)
if ((!s) || (!c))
return;
len = strlen(s);
+
if (!a)
- a = XInternAtom(GDK_DISPLAY(), "ENL_MSG", True);
+ a = gdk_x11_get_xatom_by_name("ENL_MSG");
+
ev.xclient.type = ClientMessage;
ev.xclient.serial = 0;
ev.xclient.send_event = True;
@@ -101,13 +109,15 @@ CommsSend(const gchar * s)
ss[20] = 0;
for (k = 0; k < 20; k++)
ev.xclient.data.b[k] = ss[k];
- XSendEvent(GDK_DISPLAY(), c->win, False, 0, (XEvent *) & ev);
+ XSendEvent(gdk_x11_get_default_xdisplay(), c->win, False, 0,
+ (XEvent *) & ev);
}
- return;
+ XFlush(gdk_x11_get_default_xdisplay());
}
static GdkFilterReturn
-CommsFilter(GdkXEvent * gdk_xevent, GdkEvent * event, gpointer data)
+CommsFilter(GdkXEvent * gdk_xevent, GdkEvent * event __UNUSED__,
+ gpointer data __UNUSED__)
{
XEvent *xevent;
gchar *msg = NULL;
@@ -117,7 +127,8 @@ CommsFilter(GdkXEvent * gdk_xevent, GdkEvent * event,
gpointer data)
data = NULL;
if (!a)
- a = XInternAtom(GDK_DISPLAY(), "ENL_MSG", True);
+ a = gdk_x11_get_xatom_by_name("ENL_MSG");
+
xevent = (XEvent *) gdk_xevent;
switch (xevent->type)
{
@@ -140,12 +151,10 @@ CommsFilter(GdkXEvent * gdk_xevent, GdkEvent * event,
gpointer data)
g_snprintf(st, sizeof(st), "%8x", (int)comms_win);
e_client->name = g_strdup(st);
if (gdkwin)
- gdk_window_unref(gdkwin);
+ g_object_unref(gdkwin);
gdkwin = gdk_window_foreign_new(comms_win);
gdk_window_add_filter(gdkwin, CommsFilter, NULL);
- XSelectInput(GDK_DISPLAY(), comms_win,
- StructureNotifyMask |
- SubstructureNotifyMask);
+ gdk_window_set_events(gdkwin, GDK_STRUCTURE_MASK);
}
sleep(1);
}
@@ -155,12 +164,8 @@ CommsFilter(GdkXEvent * gdk_xevent, GdkEvent * event,
gpointer data)
GtkWidget *win, *label, *align, *frame, *button,
*vbox;
-#ifdef ENABLE_GTK2
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-#else
- win = gtk_window_new(GTK_WINDOW_DIALOG);
-#endif
- gtk_window_set_policy(GTK_WINDOW(win), 0, 0, 1);
+ gtk_window_set_resizable(GTK_WINDOW(win), FALSE);
gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER);
frame = gtk_frame_new(NULL);
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT);
@@ -168,9 +173,8 @@ CommsFilter(GdkXEvent * gdk_xevent, GdkEvent * event,
gpointer data)
gtk_container_set_border_width(GTK_CONTAINER(align), 32);
vbox = gtk_vbox_new(FALSE, 5);
button = gtk_button_new_with_label("Bye bye!");
- gtk_signal_connect(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(on_exit_application),
- NULL);
+ g_signal_connect(G_OBJECT(button), "clicked",
+ on_exit_application, NULL);
label =
gtk_label_new("EEEEEEEEEEEEEEK! HELP! HEEEEEEEEEELP!\n"
"\n" "Enlightenemnt dissapeared on me!\n"
@@ -192,10 +196,12 @@ CommsFilter(GdkXEvent * gdk_xevent, GdkEvent * event,
gpointer data)
}
else
{
+#if USE_GTK == 0 /* Needed? */
gdk_window_destroy_notify(((GdkEventAny *) event)->window);
+#endif
}
- return GDK_FILTER_REMOVE;
break;
+
case ClientMessage:
if (xevent->xclient.message_type != a)
return GDK_FILTER_CONTINUE;
@@ -205,11 +211,11 @@ CommsFilter(GdkXEvent * gdk_xevent, GdkEvent * event,
gpointer data)
if (msg_receive_callback)
(*msg_receive_callback) (msg);
g_free(msg);
- return GDK_FILTER_REMOVE;
}
break;
+
default:
- return GDK_FILTER_REMOVE;
+ break;
}
return GDK_FILTER_REMOVE;
}
@@ -222,7 +228,7 @@ CommsSetup(void)
str = getenv("ENL_WM_ROOT");
root_win = (str) ? strtoul(str, NULL, 0) : GDK_ROOT_WINDOW();
- my_win = XCreateSimpleWindow(GDK_DISPLAY(), root_win,
+ my_win = XCreateSimpleWindow(gdk_x11_get_default_xdisplay(), root_win,
-100, -100, 5, 5, 0, 0, 0);
}
@@ -238,12 +244,13 @@ CommsFindCommsWindow(void)
int dint;
unsigned int duint;
- a = XInternAtom(GDK_DISPLAY(), "ENLIGHTENMENT_COMMS", True);
+ a = gdk_x11_get_xatom_by_name("ENLIGHTENMENT_COMMS");
if (a != None)
{
s = NULL;
- XGetWindowProperty(GDK_DISPLAY(), root_win, a, 0, 14, False,
- AnyPropertyType, &ar, &format, &num, &after, &s);
+ XGetWindowProperty(gdk_x11_get_default_xdisplay(), root_win, a, 0, 14,
+ False, AnyPropertyType, &ar, &format, &num, &after,
+ &s);
if (s)
{
sscanf((char *)s, "%*s %x", (unsigned int *)&win);
@@ -255,17 +262,18 @@ CommsFindCommsWindow(void)
p = gdk_error_warnings;
gdk_error_warnings = 0;
- if (!XGetGeometry(GDK_DISPLAY(), win, &rt, &dint, &dint,
- &duint, &duint, &duint, &duint))
+ if (!XGetGeometry
+ (gdk_x11_get_default_xdisplay(), win, &rt, &dint, &dint,
+ &duint, &duint, &duint, &duint))
win = 0;
gdk_flush();
gdk_error_warnings = p;
s = NULL;
if (win)
{
- XGetWindowProperty(GDK_DISPLAY(), win, a, 0, 14, False,
- AnyPropertyType, &ar, &format, &num,
- &after, &s);
+ XGetWindowProperty(gdk_x11_get_default_xdisplay(), win, a, 0,
+ 14, False, AnyPropertyType, &ar, &format,
+ &num, &after, &s);
if (s)
XFree(s);
else
@@ -286,7 +294,8 @@ CommsGet(Client ** c, XEvent * ev)
static Atom a;
if (!a)
- a = XInternAtom(GDK_DISPLAY(), "ENL_MSG", True);
+ a = gdk_x11_get_xatom_by_name("ENL_MSG");
+
if ((!ev) || (!c))
return (NULL);
if (ev->type != ClientMessage)
@@ -334,20 +343,10 @@ MakeClient(Window win)
{
Client *c;
- c = g_malloc(sizeof(Client));
- if (!c)
- return (NULL);
- c->name = NULL;
- c->win = win;
- c->msg = NULL;
- c->clientname = NULL;
- c->version = NULL;
- c->author = NULL;
- c->email = NULL;
- c->web = NULL;
- c->address = NULL;
- c->info = NULL;
- return (c);
+ c = g_malloc0(sizeof(Client));
+ if (c)
+ c->win = win;
+ return c;
}
static void
@@ -358,24 +357,14 @@ ListFreeClient(void *ptr)
c = (Client *) ptr;
if (!c)
return;
- if (c->name)
- g_free(c->name);
- if (c->msg)
- g_free(c->msg);
- if (c->clientname)
- g_free(c->clientname);
- if (c->version)
- g_free(c->version);
- if (c->author)
- g_free(c->author);
- if (c->email)
- g_free(c->email);
- if (c->web)
- g_free(c->web);
- if (c->address)
- g_free(c->address);
- if (c->info)
- g_free(c->info);
+ g_free(c->name);
+ g_free(c->msg);
+ g_free(c->clientname);
+ g_free(c->version);
+ g_free(c->author);
+ g_free(c->email);
+ g_free(c->web);
+ g_free(c->address);
+ g_free(c->info);
g_free(c);
- return;
}
diff --git a/ipc.h b/ipc.h
deleted file mode 100644
index 3fb3a7e..0000000
--- a/ipc.h
+++ /dev/null
@@ -1,5 +0,0 @@
-gint CommsInit(void (*msg_receive_func) (gchar * msg));
-void CommsSend(const gchar * s);
-
-gchar in_init;
-gint gdk_error_warnings;
diff --git a/menus.c b/menus.c
index 4538656..e7e5e03 100644
--- a/menus.c
+++ b/menus.c
@@ -8,8 +8,7 @@
#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
-#include "menus.h"
-#include "viewer.h"
+#include "e16keyedit.h"
GtkWidget *
CreateBarSubMenu(GtkWidget * menu, const char *szName)
@@ -18,13 +17,12 @@ CreateBarSubMenu(GtkWidget * menu, const char *szName)
GtkWidget *submenu;
menuitem = gtk_menu_item_new_with_label(szName);
- gtk_menu_bar_append(GTK_MENU_BAR(menu), menuitem);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
gtk_widget_show(menuitem);
submenu = gtk_menu_new();
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);
return submenu;
-
}
GtkWidget *
@@ -34,19 +32,20 @@ CreateRightAlignBarSubMenu(GtkWidget * menu, const char
*szName)
GtkWidget *submenu;
menuitem = gtk_menu_item_new_with_label(szName);
+#if USE_GTK == 2
gtk_menu_item_right_justify(GTK_MENU_ITEM(menuitem));
- gtk_menu_bar_append(GTK_MENU_BAR(menu), menuitem);
+#endif
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
gtk_widget_show(menuitem);
submenu = gtk_menu_new();
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);
return submenu;
-
}
GtkWidget *
CreateMenuItem(GtkWidget * menu, const char *szName, const char *szAccel,
- const char *szTip, GtkSignalFunc func, const void *data)
+ const char *szTip, GCallback func, const void *data)
{
GtkWidget *menuitem;
@@ -54,15 +53,15 @@ CreateMenuItem(GtkWidget * menu, const char *szName, const
char *szAccel,
{
menuitem = gtk_menu_item_new_with_label(szName);
if (func)
- gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
- GTK_SIGNAL_FUNC(func), (gpointer) data);
+ g_signal_connect(G_OBJECT(menuitem), "activate", func,
+ (gpointer) data);
}
else
{
menuitem = gtk_menu_item_new();
}
- gtk_menu_append(GTK_MENU(menu), menuitem);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
gtk_widget_show(menuitem);
if (szAccel && szAccel[0] == '^')
@@ -72,11 +71,8 @@ CreateMenuItem(GtkWidget * menu, const char *szName, const
char *szAccel,
GTK_ACCEL_VISIBLE);
}
- if (szTip && strlen(szTip))
- {
- gtk_tooltips_set_tip(tooltips, menuitem, szTip, NULL);
- }
+ if (szTip && *szTip)
+ gtk_widget_set_tooltip_text(menuitem, szTip);
return menuitem;
-
}
diff --git a/menus.h b/menus.h
deleted file mode 100644
index 2a32ade..0000000
--- a/menus.h
+++ /dev/null
@@ -1,6 +0,0 @@
-GtkWidget *CreateBarSubMenu(GtkWidget * menu, const char *szName);
-GtkWidget *CreateRightAlignBarSubMenu(GtkWidget * menu,
- const char *szName);
-GtkWidget *CreateMenuItem(GtkWidget * menu, const char *szName,
- const char *szAccel, const char *szTip,
- GtkSignalFunc func, const void *data);
diff --git a/viewer.c b/viewer.c
index a44866b..5c95273 100644
--- a/viewer.c
+++ b/viewer.c
@@ -2,6 +2,7 @@
#include <gtk/gtk.h>
#include <ctype.h>
+#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -11,22 +12,22 @@
#include <gdk/gdkx.h>
#include <unistd.h>
-#include "viewer.h"
-#include "menus.h"
-#include "ipc.h"
+#include "e16keyedit.h"
-#if __GNUC__ /* FIXME - Use autofoo */
-#define __UNUSED__ __attribute__((unused))
+#if USE_GTK == 3
+#define USE_GTK_TREEVIEW 1
#else
-#define __UNUSED__
+#define USE_GTK_TREEVIEW 1
+#endif
+#if !USE_GTK_TREEVIEW
+#define ENABLE_SORTING 1
#endif
#define DEBUG 0
#define VER(maj, min, mic) (10000 * (maj) + 100 * (min) + (mic))
-extern GtkTooltips *tooltips;
-extern GtkAccelGroup *accel_group;
+GtkAccelGroup *accel_group;
static GtkWidget *clist;
static GtkWidget *act_key;
@@ -219,13 +220,68 @@ mod_short_to_index(const char *name_short)
return 0; /* Discard modifier */
}
+#if USE_GTK_TREEVIEW
+static int
+clist_sel_row_get(GtkTreeSelection * sel)
+{
+ int row, *rows;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ GtkTreePath *path;
+
+ row = -1;
+ if (gtk_tree_selection_get_selected(sel, &model, &iter))
+ {
+ path = gtk_tree_model_get_path(model, &iter);
+ rows = gtk_tree_path_get_indices(path);
+ row = rows[0];
+ }
+
+ return row;
+}
+#endif
+
+static void
+clist_row_current_set_value(GtkWidget * widget, int col, const char *txt)
+{
+#if USE_GTK_TREEVIEW
+ GtkTreeSelection *sel;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
+ if (gtk_tree_selection_get_selected(sel, &model, &iter))
+ gtk_list_store_set(GTK_LIST_STORE(model), &iter, col, txt, -1);
+#else
+ gtk_clist_set_text(GTK_CLIST(widget), last_row, col, txt);
+#endif
+}
+
+static void
+clist_row_moveto(GtkWidget * widget, int row)
+{
+#if USE_GTK_TREEVIEW
+ GtkTreeSelection *sel;
+ GtkTreePath *path;
+
+ sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
+ path = gtk_tree_path_new_from_indices(row, -1);
+ gtk_tree_selection_select_path(sel, path);
+ gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(widget), path, NULL, FALSE, .5,
+ .5);
+ gtk_tree_path_free(path);
+#else
+ gtk_clist_select_row(GTK_CLIST(widget), row, 0);
+ gtk_clist_moveto(GTK_CLIST(widget), row, 0, 0.5, 0.5);
+#endif
+}
+
static void
e_cb_key_change(GtkWidget * widget __UNUSED__, gpointer data __UNUSED__)
{
GtkWidget *win, *label, *frame, *align;
win = gtk_window_new(GTK_WINDOW_POPUP);
- gtk_window_set_policy(GTK_WINDOW(win), 0, 0, 1);
gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_MOUSE);
frame = gtk_frame_new(NULL);
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT);
@@ -248,72 +304,96 @@ e_cb_key_change(GtkWidget * widget __UNUSED__, gpointer
data __UNUSED__)
char *key;
XEvent ev;
- gdk_window_set_events(win->window, GDK_KEY_PRESS_MASK);
- XSetInputFocus(GDK_DISPLAY(), GDK_WINDOW_XWINDOW(win->window),
+#define WIDGET_XID(widget) GDK_WINDOW_XID(gtk_widget_get_window(widget))
+ gdk_window_set_events(gtk_widget_get_window(win), GDK_KEY_PRESS_MASK);
+ XGrabKeyboard(gdk_x11_get_default_xdisplay(), WIDGET_XID(win),
+ False, GrabModeAsync, GrabModeAsync, CurrentTime);
+ XSetInputFocus(gdk_x11_get_default_xdisplay(), WIDGET_XID(win),
RevertToPointerRoot, CurrentTime);
- gdk_keyboard_grab(win->window, TRUE, CurrentTime);
- XWindowEvent(GDK_DISPLAY(), GDK_WINDOW_XWINDOW(win->window),
+ XWindowEvent(gdk_x11_get_default_xdisplay(), WIDGET_XID(win),
KeyPressMask, &ev);
-#ifdef ENABLE_GTK2
- gdk_keyboard_ungrab(GDK_CURRENT_TIME);
-#else
- gdk_keyboard_ungrab(gdk_time_get());
-#endif
- key = XKeysymToString(XkbKeycodeToKeysym(GDK_DISPLAY(),
- ev.xkey.keycode, 0, 0));
+ XUngrabKeyboard(gdk_x11_get_default_xdisplay(), CurrentTime);
+ key = XKeysymToString(XkbKeycodeToKeysym(gdk_x11_get_default_xdisplay(),
+ ev.xkey.keycode, 0, 0));
gtk_entry_set_text(GTK_ENTRY(act_key), key);
- gtk_clist_set_text(GTK_CLIST(clist), last_row, 1, key);
+ clist_row_current_set_value(clist, 1, key);
}
gtk_widget_destroy(win);
}
static void
-e_cb_modifier(GtkWidget * widget __UNUSED__, gpointer data)
+e_cb_modifier(GtkWidget * widget, gpointer data __UNUSED__)
{
- gint value;
+ int i;
- value = (gint) (glong) data;
- gtk_clist_set_text(GTK_CLIST(clist), last_row, 0, MOD_TEXT(value));
+ if (dont_update)
+ return;
+
+ i = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
+ clist_row_current_set_value(clist, 0, MOD_TEXT(i));
}
static gchar *
wait_for_ipc_msg(void)
{
- gtk_main();
+ e_ipc_msg = NULL;
+ do
+ {
+ gtk_main_iteration();
+ }
+ while (!e_ipc_msg);
+
return e_ipc_msg;
}
+#if USE_GTK_TREEVIEW
+static void
+change_action(GtkTreeSelection * sel, gpointer data __UNUSED__)
+#else
static void
change_action(GtkWidget * my_clist __UNUSED__, gint row, gint column
__UNUSED__,
GdkEventButton * event __UNUSED__, gpointer data __UNUSED__)
+#endif
{
int k;
if (dont_update)
return;
+#if USE_GTK_TREEVIEW
+ int row;
+
+ row = clist_sel_row_get(sel);
+#endif
+
+ if (row < 0)
+ return;
+
k = action_row_to_index[row];
if (actions[k].param_tpe != 0)
{
- gtk_entry_set_editable(GTK_ENTRY(act_params), TRUE);
+ gtk_editable_set_editable(GTK_EDITABLE(act_params), TRUE);
gtk_widget_set_sensitive(act_params, TRUE);
}
else
{
- gtk_entry_set_editable(GTK_ENTRY(act_params), FALSE);
+ gtk_editable_set_editable(GTK_EDITABLE(act_params), FALSE);
gtk_widget_set_sensitive(act_params, FALSE);
gtk_entry_set_text(GTK_ENTRY(act_params), "");
}
+ dont_update = 1;
if (actions[k].command)
gtk_entry_set_text(GTK_ENTRY(act_params), actions[k].command);
else
gtk_entry_set_text(GTK_ENTRY(act_params), "* Not available *");
- gtk_clist_set_text(GTK_CLIST(clist), last_row, 2, actions[k].text);
- gtk_clist_set_text(GTK_CLIST(clist), last_row, 3,
- gtk_entry_get_text(GTK_ENTRY(act_params)));
+ dont_update = 0;
+
+ clist_row_current_set_value(clist, 2, actions[k].text);
+ clist_row_current_set_value(clist, 3,
+ gtk_entry_get_text(GTK_ENTRY(act_params)));
}
static char *
@@ -335,23 +415,39 @@ dupcat(char *dst, const char *src)
}
static void
-on_save_data(GtkWidget * widget __UNUSED__, gpointer data __UNUSED__)
+on_save_data(void)
{
char *buf = NULL;
- int i;
buf = dupcat(buf, "ac kb set\nAclass KEYBINDINGS global\n");
+#if USE_GTK_TREEVIEW
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gboolean ok;
+
+ model = gtk_tree_view_get_model(GTK_TREE_VIEW(clist));
+ for (ok = gtk_tree_model_get_iter_first(model, &iter); ok;
+ ok = gtk_tree_model_iter_next(model, &iter))
+#else
+ int i;
+
for (i = 0; i < real_rows; i++)
+#endif
{
char tmp[1024];
- char *params;
- char *key;
- char *mod;
+ char *mod, *key, *prm;
int modifier = 0;
int j;
+#if USE_GTK_TREEVIEW
+ gtk_tree_model_get(model, &iter, 0, &mod, 1, &key, 3, &prm, -1);
+#else
gtk_clist_get_text(GTK_CLIST(clist), i, 0, &mod);
+ gtk_clist_get_text(GTK_CLIST(clist), i, 1, &key);
+ gtk_clist_get_text(GTK_CLIST(clist), i, 3, &prm);
+#endif
+
for (j = 0; j < 21; j++)
{
if (!strcmp(MOD_TEXT(j), mod))
@@ -359,11 +455,8 @@ on_save_data(GtkWidget * widget __UNUSED__, gpointer data
__UNUSED__)
modifier = j;
}
}
- gtk_clist_get_text(GTK_CLIST(clist), i, 1, &key);
- gtk_clist_get_text(GTK_CLIST(clist), i, 3, ¶ms);
-
snprintf(tmp, sizeof(tmp), "%s %s %s %s\n", "KeyDown",
- modifiers[modifier].name_short, key, params);
+ modifiers[modifier].name_short, key, prm);
buf = dupcat(buf, tmp);
}
@@ -377,57 +470,80 @@ on_save_data(GtkWidget * widget __UNUSED__, gpointer data
__UNUSED__)
free(buf);
}
+#if USE_GTK_TREEVIEW
+static void
+selection_made(GtkTreeSelection * sel, gpointer data __UNUSED__)
+#else
static void
selection_made(GtkWidget * my_clist __UNUSED__, gint row,
gint column __UNUSED__, GdkEventButton * event __UNUSED__,
gpointer data __UNUSED__)
+#endif
{
- gchar *modstring;
- gchar *keyused;
- gchar *actperform;
- gchar *paramsused;
+ gchar *mod, *key, *act, *prm;
int i;
+#if USE_GTK_TREEVIEW
+ int row;
+
+ row = clist_sel_row_get(sel);
+#endif
+
+ if (row < 0)
+ return;
+
dont_update = 1;
- gtk_clist_get_text(GTK_CLIST(clist), row, 0, &modstring);
- gtk_option_menu_set_history(GTK_OPTION_MENU(act_mod), 0);
- for (i = 1; i < 21; i++)
+#if USE_GTK_TREEVIEW
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+
+ if (gtk_tree_selection_get_selected(sel, &model, &iter))
{
- if (!strcmp(MOD_TEXT(i), modstring))
- {
- gtk_option_menu_set_history(GTK_OPTION_MENU(act_mod), i);
- }
+ gtk_tree_model_get(model, &iter,
+ 0, &mod, 1, &key, 2, &act, 3, &prm, -1);
}
+#else
+ gtk_clist_get_text(GTK_CLIST(clist), row, 0, &mod);
+ gtk_clist_get_text(GTK_CLIST(clist), row, 1, &key);
+ gtk_clist_get_text(GTK_CLIST(clist), row, 2, &act);
+ gtk_clist_get_text(GTK_CLIST(clist), row, 3, &prm);
+#endif
- gtk_clist_get_text(GTK_CLIST(clist), row, 1, &keyused);
- gtk_entry_set_text(GTK_ENTRY(act_key), keyused);
-
- gtk_clist_get_text(GTK_CLIST(clist), row, 2, &actperform);
-
- gtk_clist_get_text(GTK_CLIST(clist), row, 3, ¶msused);
- gtk_entry_set_text(GTK_ENTRY(act_params), paramsused);
+ for (i = 0; i < 21; i++)
+ {
+ if (!strcmp(MOD_TEXT(i), mod))
+ gtk_combo_box_set_active(GTK_COMBO_BOX(act_mod), i);
+ }
+ gtk_entry_set_text(GTK_ENTRY(act_key), key);
+ gtk_entry_set_text(GTK_ENTRY(act_params), prm);
- i = match_action_by_selection(actperform);
+ i = match_action_by_selection(act);
if (i < 0 || actions[i].param_tpe == 0)
{
- gtk_entry_set_editable(GTK_ENTRY(act_params), FALSE);
+ gtk_editable_set_editable(GTK_EDITABLE(act_params), FALSE);
gtk_widget_set_sensitive(act_params, FALSE);
}
else
{
- gtk_entry_set_editable(GTK_ENTRY(act_params), TRUE);
+ gtk_editable_set_editable(GTK_EDITABLE(act_params), TRUE);
gtk_widget_set_sensitive(act_params, TRUE);
}
+#if USE_GTK_TREEVIEW
+ g_free(mod);
+ g_free(key);
+ g_free(act);
+ g_free(prm);
+#endif
+
if (i >= 0)
{
i = action_index_to_row[i];
- gtk_clist_select_row(GTK_CLIST(act_clist), i, 0);
- gtk_clist_moveto(GTK_CLIST(act_clist), i, 0, 0.5, 0.5);
+ clist_row_moveto(act_clist, i);
}
- /* printf("%s\n%s\n%s\n%s\n",modstring,keyused,actperform,paramsused); */
+ /* printf("%s\n%s\n%s\n%s\n",mod,key,act,prm); */
last_row = row;
@@ -469,6 +585,7 @@ get_line(gchar * str, int num)
}
}
+#if ENABLE_SORTING
static void
on_resort_columns(GtkWidget * widget __UNUSED__, gint column,
gpointer data __UNUSED__)
@@ -499,70 +616,79 @@ on_resort_columns(GtkWidget * widget __UNUSED__, gint
column,
gtk_clist_sort(GTK_CLIST(clist));
}
+#endif /* ENABLE_SORTING */
static void
on_delete_row(GtkWidget * widget __UNUSED__, gpointer data __UNUSED__)
{
+#if USE_GTK_TREEVIEW
+ GtkTreeSelection *sel;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+
+ sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(clist));
+ if (!gtk_tree_selection_get_selected(sel, &model, &iter))
+ return;
+ gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
+#else
gtk_clist_remove(GTK_CLIST(clist), last_row);
+#endif
real_rows--;
if (last_row >= real_rows)
last_row--;
- gtk_clist_select_row(GTK_CLIST(clist), last_row, 0);
- gtk_clist_moveto(GTK_CLIST(clist), last_row, 0, 0.5, 0.5);
+ clist_row_moveto(clist, last_row);
}
static void
on_create_row(GtkWidget * widget __UNUSED__, gpointer data __UNUSED__)
{
+#if USE_GTK_TREEVIEW
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ model = gtk_tree_view_get_model(GTK_TREE_VIEW(clist));
+ gtk_list_store_append(GTK_LIST_STORE(model), &iter);
+ gtk_list_store_set(GTK_LIST_STORE(model), &iter,
+ 0, "", 1, "", 2, "", 3, "", -1);
+#else
char *stuff[4];
- stuff[0] = malloc(2);
- strcpy(stuff[0], "");
- stuff[1] = malloc(2);
- strcpy(stuff[1], "");
- stuff[2] = malloc(2);
- strcpy(stuff[2], "");
- stuff[3] = malloc(2);
- strcpy(stuff[3], "");
+ stuff[0] = "";
+ stuff[1] = "";
+ stuff[2] = "";
+ stuff[3] = "";
gtk_clist_select_row(GTK_CLIST(clist),
gtk_clist_append(GTK_CLIST(clist), stuff), 0);
-
- if (stuff[0])
- free(stuff[0]);
- if (stuff[1])
- free(stuff[1]);
- if (stuff[2])
- free(stuff[2]);
- if (stuff[3])
- free(stuff[3]);
+#endif
last_row = real_rows++;
- gtk_clist_select_row(GTK_CLIST(clist), last_row, 0);
- gtk_clist_moveto(GTK_CLIST(clist), last_row, 0, 0.5, 0.5);
+ clist_row_moveto(clist, last_row);
}
static void
-on_change_params(GtkWidget * widget __UNUSED__, gpointer data __UNUSED__)
+on_change_params(GtkWidget * widget, gpointer data __UNUSED__)
{
- if (!dont_update)
- {
- gtk_clist_set_text(GTK_CLIST(clist), last_row, 3,
- gtk_entry_get_text(GTK_ENTRY(act_params)));
- }
+ const char *txt;
+
+ if (dont_update)
+ return;
+
+ txt = gtk_entry_get_text(GTK_ENTRY(widget));
+ clist_row_current_set_value(clist, 3, txt);
}
void
-on_exit_application(GtkWidget * widget __UNUSED__, gpointer data __UNUSED__)
+on_exit_application(void)
{
- gtk_exit(0);
+ exit(0);
}
static void
-on_save_and_exit_application(GtkWidget * widget, gpointer data)
+on_save_and_exit_application(void)
{
- on_save_data(widget, data);
- on_exit_application(widget, data);
+ on_save_data();
+ on_exit_application();
}
static GtkWidget *
@@ -582,75 +708,99 @@ create_list_window(void)
GtkWidget *entry;
GtkWidget *button;
GtkWidget *hbox;
- GtkWidget *m, *mi, *om;
- GtkWidget *menu, *menuitem;
+ GtkWidget *om;
+ GtkWidget *menu;
+
+#if USE_GTK_TREEVIEW
+ GtkCellRenderer *renderer;
+ GtkListStore *store;
+ GtkTreeIter iter;
+ GtkTreeSelection *sel;
+#endif
+
+ int i;
list_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(list_window), 400, 400);
- gtk_object_set_data(GTK_OBJECT(list_window), "key_editor", list_window);
- GTK_WIDGET_SET_FLAGS(list_window, GTK_CAN_FOCUS);
- GTK_WIDGET_SET_FLAGS(list_window, GTK_CAN_DEFAULT);
+ g_object_set_data(G_OBJECT(list_window), "key_editor", list_window);
+ gtk_widget_set_can_focus(list_window, TRUE);
+ gtk_widget_set_can_default(list_window, TRUE);
gtk_window_set_title(GTK_WINDOW(list_window), "E Keys Editor");
bigvbox = gtk_vbox_new(FALSE, 0);
- gtk_widget_show(bigvbox);
gtk_container_add(GTK_CONTAINER(list_window), bigvbox);
menubar = gtk_menu_bar_new();
- gtk_widget_show(menubar);
gtk_box_pack_start(GTK_BOX(bigvbox), menubar, FALSE, FALSE, 0);
menu = CreateBarSubMenu(menubar, "File");
- menuitem = CreateMenuItem(menu, "Save", "", "Save Current Data", NULL,
- "save data");
- gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
- GTK_SIGNAL_FUNC(on_save_data), NULL);
- menuitem = CreateMenuItem(menu, "Save & Quit", "",
- "Save Current Data & Quit Application", NULL,
- "save quit");
- gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
- GTK_SIGNAL_FUNC(on_save_and_exit_application), NULL);
- menuitem =
- CreateMenuItem(menu, "Quit", "", "Quit Without Saving", NULL,
- "quit program");
- gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
- GTK_SIGNAL_FUNC(on_exit_application), NULL);
-
+ CreateMenuItem(menu, "Save", "", "Save Current Data", on_save_data, NULL);
+ CreateMenuItem(menu, "Save & Quit", "",
+ "Save Current Data & Quit Application",
+ on_save_and_exit_application, NULL);
+ CreateMenuItem(menu, "Quit", "", "Quit Without Saving",
+ on_exit_application, NULL);
+
+#if 0 /* Not implemented */
menu = CreateRightAlignBarSubMenu(menubar, "Help");
menuitem = CreateMenuItem(menu, "About", "", "About E Keybinding Editor",
NULL, "about");
menuitem = CreateMenuItem(menu, "Documentation", "",
"Read the Keybinding Editor Documentation", NULL,
"read docs");
+#endif
+#if USE_GTK == 3
+ panes = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
+#else
panes = gtk_hpaned_new();
- gtk_widget_show(panes);
- gtk_paned_set_gutter_size(GTK_PANED(panes), 10);
+#endif
gtk_box_pack_start(GTK_BOX(bigvbox), panes, TRUE, TRUE, 0);
scrollybit = gtk_scrolled_window_new(NULL, NULL);
- gtk_widget_show(scrollybit);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollybit),
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_paned_pack1(GTK_PANED(panes), scrollybit, TRUE, FALSE);
+#if USE_GTK_TREEVIEW
+ clist = gtk_tree_view_new();
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(clist),
+ -1, "Modifier", renderer, "text",
+ 0, NULL);
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(clist),
+ -1, "Key", renderer, "text", 1,
+ NULL);
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(clist),
+ -1, "Action to Perform",
+ renderer, "text", 2, NULL);
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(clist),
+ -1, "Command", renderer, "text",
+ 3, NULL);
+
+ store = gtk_list_store_new(4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_STRING);
+#else
clist = gtk_clist_new(4);
- gtk_widget_show(clist);
- gtk_container_add(GTK_CONTAINER(scrollybit), clist);
-
gtk_clist_set_column_title(GTK_CLIST(clist), 0, "Modifier");
gtk_clist_set_column_title(GTK_CLIST(clist), 1, "Key");
gtk_clist_set_column_title(GTK_CLIST(clist), 2, "Action to Perform");
gtk_clist_set_column_title(GTK_CLIST(clist), 3, "Command");
+#if 0
+ gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 0, TRUE);
+ gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 1, TRUE);
+#endif
gtk_clist_column_titles_show(GTK_CLIST(clist));
- gtk_signal_connect(GTK_OBJECT(clist), "select_row",
- GTK_SIGNAL_FUNC(selection_made), NULL);
- gtk_signal_connect(GTK_OBJECT(clist), "click_column",
- GTK_SIGNAL_FUNC(on_resort_columns), NULL);
+#endif
+ gtk_container_add(GTK_CONTAINER(scrollybit), clist);
{
char *msg, *buf;
- int i, j, k, modifier;
+ int j, k, modifier;
char event[128], mod[128], key[128], *params;
const char *stuff[4];
int len;
@@ -691,7 +841,14 @@ create_list_window(void)
stuff[1] = key;
stuff[2] = (k >= 0) ? actions[k].text : "* Not recognised *";
stuff[3] = params;
+#if USE_GTK_TREEVIEW
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter,
+ 0, stuff[0], 1, stuff[1],
+ 2, stuff[2], 3, stuff[3], -1);
+#else
gtk_clist_append(GTK_CLIST(clist), (char **)stuff);
+#endif
real_rows++;
next:
@@ -699,118 +856,152 @@ create_list_window(void)
}
g_free(msg);
}
+#if USE_GTK_TREEVIEW
+ gtk_tree_view_set_model(GTK_TREE_VIEW(clist), GTK_TREE_MODEL(store));
+ g_object_unref(store);
+ sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(clist));
+ gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);
+ g_signal_connect(G_OBJECT(sel), "changed", G_CALLBACK(selection_made),
NULL);
+#if ENABLE_SORTING
+ g_signal_connect(G_OBJECT(clist), "click_column", /////////////////// CRAP
+ G_CALLBACK(on_resort_columns), NULL);
+#endif
+#else
gtk_clist_columns_autosize(GTK_CLIST(clist));
+ g_signal_connect(G_OBJECT(clist), "select_row",
+ G_CALLBACK(selection_made), NULL);
+ g_signal_connect(G_OBJECT(clist), "click_column",
+ G_CALLBACK(on_resort_columns), NULL);
+#endif
+
vbox = gtk_vbox_new(FALSE, 0);
- gtk_widget_show(vbox);
frames = gtk_frame_new("Edit Keybinding Properties");
gtk_container_set_border_width(GTK_CONTAINER(frames), 2);
- gtk_widget_show(frames);
- gtk_paned_pack2(GTK_PANED(panes), vbox, FALSE, TRUE);
+ gtk_paned_pack2(GTK_PANED(panes), vbox, FALSE, FALSE);
gtk_box_pack_start(GTK_BOX(vbox), frames, TRUE, TRUE, 0);
frame_vbox = gtk_vbox_new(FALSE, 3);
- gtk_widget_show(frame_vbox);
gtk_container_set_border_width(GTK_CONTAINER(frame_vbox), 4);
gtk_container_add(GTK_CONTAINER(frames), frame_vbox);
+#if USE_GTK == 3
+ table = gtk_grid_new();
+ gtk_grid_set_row_spacing(GTK_GRID(table), 3);
+ gtk_grid_set_column_spacing(GTK_GRID(table), 3);
+#else
table = gtk_table_new(3, 3, FALSE);
- gtk_widget_show(table);
gtk_table_set_row_spacings(GTK_TABLE(table), 3);
gtk_table_set_col_spacings(GTK_TABLE(table), 3);
+#endif
gtk_box_pack_start(GTK_BOX(frame_vbox), table, FALSE, FALSE, 2);
alignment = gtk_alignment_new(1.0, 0.5, 0, 0);
label = gtk_label_new("Key:");
gtk_container_add(GTK_CONTAINER(alignment), label);
- gtk_widget_show(alignment);
gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
- gtk_widget_show(label);
+#if USE_GTK == 3
+ gtk_widget_set_hexpand(alignment, GTK_FILL);
+ gtk_grid_attach(GTK_GRID(table), alignment, 0, 0, 1, 1);
+#else
gtk_table_attach(GTK_TABLE(table), alignment, 0, 1, 0, 1,
GTK_FILL, (GtkAttachOptions) (0), 0, 0);
+#endif
alignment = gtk_alignment_new(1.0, 0.5, 0, 0);
label = gtk_label_new("Modifier:");
gtk_container_add(GTK_CONTAINER(alignment), label);
- gtk_widget_show(alignment);
gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
- gtk_widget_show(label);
+#if USE_GTK == 3
+ gtk_widget_set_hexpand(alignment, GTK_FILL);
+ gtk_grid_attach(GTK_GRID(table), alignment, 0, 1, 1, 1);
+#else
gtk_table_attach(GTK_TABLE(table), alignment, 0, 1, 1, 2,
GTK_FILL, (GtkAttachOptions) (0), 0, 0);
+#endif
alignment = gtk_alignment_new(1.0, 0.5, 0, 0);
label = gtk_label_new("Command:");
gtk_container_add(GTK_CONTAINER(alignment), label);
- gtk_widget_show(alignment);
gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
- gtk_widget_show(label);
+#if USE_GTK == 3
+ gtk_widget_set_hexpand(alignment, GTK_FILL);
+ gtk_grid_attach(GTK_GRID(table), alignment, 0, 2, 1, 1);
+#else
gtk_table_attach(GTK_TABLE(table), alignment, 0, 1, 2, 3,
GTK_FILL, (GtkAttachOptions) (0), 0, 0);
+#endif
- act_key = entry = gtk_entry_new_with_max_length(4096);
- gtk_widget_show(entry);
+ act_key = entry = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(entry), 4096);
gtk_widget_set_sensitive(entry, FALSE);
/* gtk_widget_set_usize(entry, 24, -1); */
+#if USE_GTK == 3
+ gtk_widget_set_hexpand(entry, GTK_EXPAND | GTK_FILL);
+ gtk_grid_attach(GTK_GRID(table), entry, 1, 0, 1, 1);
+#else
gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 0, 1,
GTK_EXPAND | GTK_FILL, (GtkAttachOptions) (0), 0, 0);
+#endif
button = gtk_button_new_with_label("Change");
- gtk_widget_show(button);
+#if USE_GTK == 3
+ gtk_widget_set_hexpand(button, GTK_EXPAND | GTK_FILL);
+ gtk_grid_attach(GTK_GRID(table), button, 2, 0, 1, 1);
+#else
gtk_table_attach(GTK_TABLE(table), button, 2, 3, 0, 1,
GTK_EXPAND | GTK_FILL, (GtkAttachOptions) (0), 0, 0);
- gtk_signal_connect(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(e_cb_key_change), NULL);
-
- m = gtk_menu_new();
- gtk_widget_show(m);
-
- mi = gtk_menu_item_new_with_label("NONE");
- gtk_widget_show(mi);
- gtk_signal_connect(GTK_OBJECT(mi), "activate",
- GTK_SIGNAL_FUNC(e_cb_modifier), (gpointer) 0);
- gtk_menu_append(GTK_MENU(m), mi);
- {
- gint i;
-
- for (i = 1; i < 21; i++)
- {
- mi = gtk_menu_item_new_with_label(MOD_TEXT(i));
- gtk_widget_show(mi);
- gtk_signal_connect(GTK_OBJECT(mi), "activate",
- GTK_SIGNAL_FUNC(e_cb_modifier),
- (gpointer) (glong) i);
- gtk_menu_append(GTK_MENU(m), mi);
- }
- }
+#endif
+ g_signal_connect(G_OBJECT(button), "clicked",
+ G_CALLBACK(e_cb_key_change), NULL);
- act_mod = om = gtk_option_menu_new();
- gtk_widget_show(om);
- gtk_option_menu_set_menu(GTK_OPTION_MENU(om), m);
- gtk_option_menu_set_history(GTK_OPTION_MENU(om), 0);
+ act_mod = om = gtk_combo_box_text_new();
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(om), "None");
+ for (i = 1; i < 21; i++)
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(om), MOD_TEXT(i));
+ gtk_combo_box_set_active(GTK_COMBO_BOX(om), 0);
+ g_signal_connect(G_OBJECT(om), "changed", G_CALLBACK(e_cb_modifier), NULL);
+#if USE_GTK == 3
+ gtk_widget_set_hexpand(om, GTK_EXPAND | GTK_FILL);
+ gtk_grid_attach(GTK_GRID(table), om, 1, 1, 2, 1);
+#else
gtk_table_attach(GTK_TABLE(table), om, 1, 3, 1, 2,
GTK_EXPAND | GTK_FILL, (GtkAttachOptions) (0), 0, 0);
+#endif
- act_params = entry = gtk_entry_new_with_max_length(4096);
- gtk_widget_show(entry);
+ act_params = entry = gtk_entry_new();
+ gtk_entry_set_max_length(GTK_ENTRY(entry), 4096);
gtk_widget_set_sensitive(entry, FALSE);
+#if USE_GTK == 3
+ gtk_widget_set_hexpand(entry, GTK_EXPAND | GTK_FILL);
+ gtk_grid_attach(GTK_GRID(table), entry, 1, 2, 2, 1);
+#else
gtk_table_attach(GTK_TABLE(table), entry, 1, 3, 2, 3,
GTK_EXPAND | GTK_FILL, (GtkAttachOptions) (0), 0, 0);
- gtk_signal_connect(GTK_OBJECT(entry), "changed",
- GTK_SIGNAL_FUNC(on_change_params), NULL);
+#endif
+ g_signal_connect(G_OBJECT(entry), "changed",
+ G_CALLBACK(on_change_params), NULL);
scrollybit = gtk_scrolled_window_new(NULL, NULL);
- gtk_widget_show(scrollybit);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollybit),
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+#if USE_GTK_TREEVIEW
+ act_clist = gtk_tree_view_new();
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(act_clist),
+ -1, "Action Used:", renderer,
+ "text", 0, NULL);
+
+ store = gtk_list_store_new(1, G_TYPE_STRING);
+#else
act_clist = gtk_clist_new(1);
- gtk_widget_show(act_clist);
- gtk_box_pack_start(GTK_BOX(frame_vbox), scrollybit, TRUE, TRUE, 0);
gtk_clist_set_column_title(GTK_CLIST(act_clist), 0, "Action Used:");
gtk_clist_column_titles_show(GTK_CLIST(act_clist));
- gtk_signal_connect(GTK_OBJECT(act_clist), "select_row",
- GTK_SIGNAL_FUNC(change_action), NULL);
+#endif
+ gtk_box_pack_start(GTK_BOX(frame_vbox), scrollybit, TRUE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(scrollybit), act_clist);
{
@@ -823,41 +1014,51 @@ create_list_window(void)
for (k = row = 0; (actions[k].text); k++)
{
stuff[0] = actions[k].text;
+#if USE_GTK_TREEVIEW
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter, 0, stuff[0], -1);
+#else
gtk_clist_append(GTK_CLIST(act_clist), (char **)stuff);
+#endif
action_index_to_row[k] = row;
action_row_to_index[row++] = k;
}
}
+#if USE_GTK_TREEVIEW
+ gtk_tree_view_set_model(GTK_TREE_VIEW(act_clist), GTK_TREE_MODEL(store));
+ g_object_unref(store);
+ sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(act_clist));
+ gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);
+ g_signal_connect(G_OBJECT(sel), "changed", G_CALLBACK(change_action), NULL);
+#else
+ g_signal_connect(G_OBJECT(act_clist), "select_row",
+ G_CALLBACK(change_action), NULL);
+#endif
hbox = gtk_hbox_new(FALSE, 0);
- gtk_widget_show(hbox);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
button = gtk_button_new_with_label(" New Keybinding ");
- gtk_widget_show(button);
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5);
- gtk_signal_connect(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(on_create_row), NULL);
+ g_signal_connect(G_OBJECT(button), "clicked",
+ G_CALLBACK(on_create_row), NULL);
button = gtk_button_new_with_label(" Delete Current Row ");
- gtk_widget_show(button);
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5);
- gtk_signal_connect(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(on_delete_row), NULL);
+ g_signal_connect(G_OBJECT(button), "clicked",
+ G_CALLBACK(on_delete_row), NULL);
button = gtk_button_new_with_label(" Save ");
- gtk_widget_show(button);
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5);
- gtk_signal_connect(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(on_save_data), NULL);
+ g_signal_connect(G_OBJECT(button), "clicked",
+ G_CALLBACK(on_save_data), NULL);
button = gtk_button_new_with_label(" Quit ");
- gtk_widget_show(button);
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 5);
- gtk_signal_connect(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(on_exit_application), NULL);
+ g_signal_connect(G_OBJECT(button), "clicked",
+ G_CALLBACK(on_exit_application), NULL);
- gtk_clist_select_row(GTK_CLIST(clist), 0, 0);
+ clist_row_moveto(clist, 0);
return list_window;
}
@@ -865,10 +1066,7 @@ create_list_window(void)
static void
receive_ipc_msg(gchar * msg)
{
- gdk_flush();
e_ipc_msg = g_strdup(msg);
-
- gtk_main_quit();
}
static void
@@ -993,18 +1191,17 @@ main(int argc, char *argv[])
{
GtkWidget *lister;
- gtk_set_locale();
+ setlocale(LC_ALL, "");
+
gtk_init(&argc, &argv);
- tooltips = gtk_tooltips_new();
accel_group = gtk_accel_group_new();
- if (!CommsInit(receive_ipc_msg))
+ if (CommsInit(receive_ipc_msg))
{
GtkWidget *win, *label, *align, *frame, *button, *vbox;
win = gtk_window_new(GTK_WINDOW_POPUP);
- gtk_window_set_policy(GTK_WINDOW(win), 0, 0, 1);
gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER);
frame = gtk_frame_new(NULL);
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT);
@@ -1012,8 +1209,8 @@ main(int argc, char *argv[])
gtk_container_set_border_width(GTK_CONTAINER(align), 32);
vbox = gtk_vbox_new(FALSE, 5);
button = gtk_button_new_with_label("Quit");
- gtk_signal_connect(GTK_OBJECT(button), "clicked",
- GTK_SIGNAL_FUNC(on_exit_application), NULL);
+ g_signal_connect(G_OBJECT(button), "clicked",
+ G_CALLBACK(on_exit_application), NULL);
label = gtk_label_new("You are not running Enlightenment\n"
"\n"
"This window manager has to be running in order\n"
@@ -1047,15 +1244,12 @@ main(int argc, char *argv[])
lister = create_list_window();
- gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 0, TRUE);
- gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 1, TRUE);
-
- gtk_widget_show(lister);
- gtk_signal_connect(GTK_OBJECT(lister), "destroy",
- GTK_SIGNAL_FUNC(on_exit_application), NULL);
- gtk_signal_connect(GTK_OBJECT(lister), "delete_event",
- GTK_SIGNAL_FUNC(on_exit_application), NULL);
+ g_signal_connect(G_OBJECT(lister), "destroy",
+ G_CALLBACK(on_exit_application), NULL);
+ g_signal_connect(G_OBJECT(lister), "delete_event",
+ G_CALLBACK(on_exit_application), NULL);
+ gtk_widget_show_all(lister);
gtk_main();
return 0;
diff --git a/viewer.h b/viewer.h
deleted file mode 100644
index 4e8abd0..0000000
--- a/viewer.h
+++ /dev/null
@@ -1,4 +0,0 @@
-void on_exit_application(GtkWidget * widget, gpointer
user_data);
-
-GtkTooltips *tooltips;
-GtkAccelGroup *accel_group;
--
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar