From 801653aa77824b28e9541e242badc02cc3da1cc7 Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Sun, 31 May 2015 21:34:57 +0100 Subject: [PATCH] Add --release option to close window on mouse release --- ChangeLog | 7 +++++++ src/display_cow.c | 5 +++-- src/xcowsay.c | 7 +++++++ xcowsay.6 | 5 +++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3ed6571..90f0d68 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2015-05-31 Nick Gasson + + * src/display_cow.c (close_when_clicked): allow close event to + be specified in settings. + * src/xcowsay.c (main): add --release option to close window on + mouse button release. + 2012-11-19 Nick Gasson * src/config_file.c (next_token): allow values with quotes diff --git a/src/display_cow.c b/src/display_cow.c index 6328534..c8aa88f 100644 --- a/src/display_cow.c +++ b/src/display_cow.c @@ -118,9 +118,10 @@ static void close_when_clicked(float_shape_t *shape) { GdkWindow *w = gtk_widget_get_window(shape_window(shape)); GdkEventMask events = gdk_window_get_events(w); - events |= GDK_BUTTON_PRESS_MASK; + events |= GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK; gdk_window_set_events(w, events); - g_signal_connect(G_OBJECT(shape_window(shape)), "button-press-event", + g_signal_connect(G_OBJECT(shape_window(shape)), + get_string_option("close_event"), G_CALLBACK(cow_clicked), NULL); } diff --git a/src/xcowsay.c b/src/xcowsay.c index 3ed32ea..6c20211 100644 --- a/src/xcowsay.c +++ b/src/xcowsay.c @@ -76,6 +76,7 @@ static struct option long_options[] = { {"left", no_argument, 0, 'l'}, {"config", required_argument, 0, 'o'}, {"debug", no_argument, &debug, 1}, + {"release", no_argument, 0, 'R'}, {0, 0, 0, 0} }; @@ -116,6 +117,7 @@ static void usage() " --no-wrap\t\t%s\n" " --config=FILE\t%s\n" " --debug\t\t%s\n\n" + " --release\t\t%s\n\n" "%s\n\n" "%s\n\n" "%s\n", @@ -139,6 +141,7 @@ static void usage() i18n("Disable wrapping if text cannot fit on screen."), i18n("Specify alternative config file."), i18n("Keep daemon attached to terminal."), + i18n("Close window on release event instead of press."), i18n("Default values for these options can be specified in the " "xcowsay config\nfile. See the man page for more information."), i18n("If the display_time option is not set the display time will " @@ -248,6 +251,7 @@ int main(int argc, char **argv) add_string_option("alt_config_file", ""); add_bool_option("wrap", true); add_bool_option("left", false); + add_string_option("close_event", "button-press-event"); parse_config_file(); @@ -312,6 +316,9 @@ int main(int argc, char **argv) case 'l': set_bool_option("left", true); break; + case 'R': + set_string_option("close_event", "button-release-event"); + break; case '?': // getopt_long already printed an error message failure = 1; diff --git a/xcowsay.6 b/xcowsay.6 index e5eda6f..6fbb825 100644 --- a/xcowsay.6 +++ b/xcowsay.6 @@ -171,6 +171,11 @@ Print messages about what .B xcowsay is doing. Useful for finding out why the daemon fails. .TP +.B "--release" +Close window on release event instead of press. The corresponding +config file option is +.IR close_event=button-release-event . +.TP .B "-v, --version" Print version information. .SH "AUTHOR" -- 2.39.2