From ff3c36c4ffba1d4bcf540417ce20fe00599cde5c Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Fri, 29 Aug 2008 20:51:25 +0100 Subject: [PATCH] Close window when the bubble is clicked --- README | 3 ++- configure.ac | 2 +- src/display_cow.c | 41 ++++++++++++++++++++++++++--------------- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/README b/README index 851d7b3..ef84f0b 100644 --- a/README +++ b/README @@ -4,6 +4,7 @@ Refer to the INSTALL file for installation instructions. make make install -If you don't want DBus support configure with --disable-dbus +To enable the daemon you must enable DBus support by running +configure with --enable-dbus Check out the man page xcowsay(6) for the documentation. \ No newline at end of file diff --git a/configure.ac b/configure.ac index a4a3a4d..1114a2d 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([xcowsay], [1.1], +AC_INIT([xcowsay], [1.1rc1], [Nick Gasson ], [xcowsay]) AM_INIT_AUTOMAKE([-Wall]) diff --git a/src/display_cow.c b/src/display_cow.c index d7936f8..1acdda8 100644 --- a/src/display_cow.c +++ b/src/display_cow.c @@ -57,6 +57,8 @@ typedef struct { static xcowsay_t xcowsay; +static gboolean tick(gpointer data); + static cowstate_t next_state(cowstate_t state) { switch (state) { @@ -88,6 +90,27 @@ static GdkPixbuf *load_cow() return pixbuf; } +static gboolean cow_clicked(GtkWidget *widget, GdkEventButton *event, gpointer data) +{ + if (csDisplay == xcowsay.state) { + xcowsay.transition_timeout = 0; + tick(NULL); + } + return true; +} + +/* + * Set up a shape to call cow_clicked when it's clicked. + */ +static void close_when_clicked(float_shape_t *shape) +{ + GdkEventMask events = gdk_window_get_events(shape_window(shape)->window); + events |= GDK_BUTTON_PRESS_MASK; + gdk_window_set_events(shape_window(shape)->window, events); + g_signal_connect(G_OBJECT(shape_window(shape)), "button-press-event", + G_CALLBACK(cow_clicked), NULL); +} + static gboolean tick(gpointer data) { xcowsay.transition_timeout -= TICK_TIMEOUT; @@ -99,6 +122,7 @@ static gboolean tick(gpointer data) exit(EXIT_FAILURE); case csDisplay: show_shape(xcowsay.bubble); + close_when_clicked(xcowsay.bubble); xcowsay.transition_timeout = xcowsay.display_time; break; case csLeadOut: @@ -117,15 +141,6 @@ static gboolean tick(gpointer data) return (xcowsay.state != csCleanup); } -static gboolean cow_clicked(GtkWidget *widget, GdkEventButton *event, gpointer data) -{ - if (csDisplay == xcowsay.state) { - xcowsay.transition_timeout = 0; - tick(NULL); - } - return true; -} - void cowsay_init(int *argc, char ***argv) { gtk_init(argc, argv); @@ -248,12 +263,8 @@ void display_cow(bool debug, const char *text, bool run_main, cowmode_t mode) xcowsay.transition_timeout = get_int_option("lead_in_time"); g_timeout_add(TICK_TIMEOUT, tick, NULL); - GdkEventMask events = gdk_window_get_events(shape_window(xcowsay.cow)->window); - events |= GDK_BUTTON_PRESS_MASK; - gdk_window_set_events(shape_window(xcowsay.cow)->window, events); - g_signal_connect(G_OBJECT(shape_window(xcowsay.cow)), "button-press-event", - G_CALLBACK(cow_clicked), NULL); - + close_when_clicked(xcowsay.cow); + if (run_main) gtk_main(); -- 2.39.2