From c567f5937b09708848c6b83c29f808f3d44145cc Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 25 Mar 2007 16:56:47 +0000 Subject: [PATCH] add support for the X Cursor library. this means a nicer cursor for startup notification. --- Makefile.am | 2 ++ configure.ac | 13 ++++++++++++ openbox/openbox.c | 53 +++++++++++++++++++++++++++-------------------- 3 files changed, 46 insertions(+), 22 deletions(-) diff --git a/Makefile.am b/Makefile.am index a61b2da9..5d463728 100644 --- a/Makefile.am +++ b/Makefile.am @@ -105,6 +105,7 @@ parser_libobparser_la_SOURCES = \ openbox_openbox_CPPFLAGS = \ $(X_CFLAGS) \ + $(XCURSOR_CFLAGS) \ $(SM_CFLAGS) \ $(PANGO_CFLAGS) \ $(GLIB_CFLAGS) \ @@ -122,6 +123,7 @@ openbox_openbox_LDADD = \ $(XSHAPE_LIBS) \ $(GLIB_LIBS) \ $(X_LIBS) \ + $(XCURSOR_LIBS) \ $(LIBSN_LIBS) \ $(XML_LIBS) \ $(EFENCE_LIBS) \ diff --git a/configure.ac b/configure.ac index 1dd2669f..4b85d807 100644 --- a/configure.ac +++ b/configure.ac @@ -107,6 +107,18 @@ else sn_found=no fi +PKG_CHECK_MODULES(XCURSOR, [xcursor], + [ + AC_DEFINE(USE_XCURSOR, [1], [Use X Cursor library]) + AC_SUBST(XCURSOR_CFLAGS) + AC_SUBST(XCURSOR_LIBS) + xcursor_found=yes + ], + [ + xcursor_found=no + ] +) + dnl Check for session management X11_SM @@ -133,6 +145,7 @@ AC_OUTPUT AC_MSG_RESULT AC_MSG_RESULT([Compiling with these options: Startup Notification... $sn_found + X Cursor Library... $xcursor_found Session Management... $SM ]) AC_MSG_RESULT([configure complete, now type "make"]) diff --git a/openbox/openbox.c b/openbox/openbox.c index 4a15edd6..c24ed76a 100644 --- a/openbox/openbox.c +++ b/openbox/openbox.c @@ -70,6 +70,9 @@ #include #include +#if USE_XCURSOR +#include +#endif RrInstance *ob_rr_inst; RrTheme *ob_rr_theme; @@ -91,6 +94,7 @@ static gboolean being_replaced = FALSE; static void signal_handler(gint signal, gpointer data); static void parse_args(gint argc, gchar **argv); +static Cursor load_cursor(const gchar *name, guint fontval); gint main(gint argc, gchar **argv) { @@ -174,28 +178,21 @@ gint main(gint argc, gchar **argv) /* create available cursors */ cursors[OB_CURSOR_NONE] = None; - cursors[OB_CURSOR_POINTER] = - XCreateFontCursor(ob_display, XC_left_ptr); - cursors[OB_CURSOR_BUSY] = - XCreateFontCursor(ob_display, XC_watch); - cursors[OB_CURSOR_MOVE] = - XCreateFontCursor(ob_display, XC_fleur); - cursors[OB_CURSOR_NORTH] = - XCreateFontCursor(ob_display, XC_top_side); - cursors[OB_CURSOR_NORTHEAST] = - XCreateFontCursor(ob_display, XC_top_right_corner); - cursors[OB_CURSOR_EAST] = - XCreateFontCursor(ob_display, XC_right_side); - cursors[OB_CURSOR_SOUTHEAST] = - XCreateFontCursor(ob_display, XC_bottom_right_corner); - cursors[OB_CURSOR_SOUTH] = - XCreateFontCursor(ob_display, XC_bottom_side); - cursors[OB_CURSOR_SOUTHWEST] = - XCreateFontCursor(ob_display, XC_bottom_left_corner); - cursors[OB_CURSOR_WEST] = - XCreateFontCursor(ob_display, XC_left_side); - cursors[OB_CURSOR_NORTHWEST] = - XCreateFontCursor(ob_display, XC_top_left_corner); + cursors[OB_CURSOR_POINTER] = load_cursor("left_ptr", XC_left_ptr); + cursors[OB_CURSOR_BUSY] = load_cursor("left_ptr_watch", XC_watch); + cursors[OB_CURSOR_MOVE] = load_cursor("fleur", XC_fleur); + cursors[OB_CURSOR_NORTH] = load_cursor("top_side", XC_top_side); + cursors[OB_CURSOR_NORTHEAST] = load_cursor("top_right_corner", + XC_top_right_corner); + cursors[OB_CURSOR_EAST] = load_cursor("right_side", XC_right_side); + cursors[OB_CURSOR_SOUTHEAST] = load_cursor("bottom_right_corner", + XC_bottom_right_corner); + cursors[OB_CURSOR_SOUTH] = load_cursor("bottom_side", XC_bottom_side); + cursors[OB_CURSOR_SOUTHWEST] = load_cursor("bottom_left_corner", + XC_bottom_left_corner); + cursors[OB_CURSOR_WEST] = load_cursor("left_side", XC_left_side); + cursors[OB_CURSOR_NORTHWEST] = load_cursor("top_left_corner", + XC_top_left_corner); /* create available keycodes */ keys[OB_KEY_RETURN] = @@ -440,6 +437,18 @@ static void parse_args(gint argc, gchar **argv) } } +static Cursor load_cursor(const gchar *name, guint fontval) +{ + Cursor c = None; + +#if USE_XCURSOR + c = XcursorLibraryLoadCursor(ob_display, name); +#endif + if (c == None) + XCreateFontCursor(ob_display, fontval); + return c; +} + void ob_exit_with_error(const gchar *msg) { g_critical(msg); -- 2.39.2