diff --git a/src/callbacks.c b/src/callbacks.c index 872450c..dfd2bdf 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -123,6 +123,9 @@ void on_view_hide(gpointer data) void on_systray_activate(gpointer data) { Keyboard * keyboard = data; + gboolean visible; - keyboard_show(keyboard, TRUE); + /* toggle visibility */ + visible = keyboard_is_visible(keyboard); + keyboard_show(keyboard, visible ? FALSE : TRUE); } diff --git a/src/keyboard.c b/src/keyboard.c index 25675ea..8998038 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -537,6 +537,13 @@ void keyboard_delete(Keyboard * keyboard) /* accessors */ +/* keyboard_is_visible */ +gboolean keyboard_is_visible(Keyboard * keyboard) +{ + return gtk_widget_get_visible(keyboard->window); +} + + /* keyboard_set_layout */ void keyboard_set_layout(Keyboard * keyboard, unsigned int which) { diff --git a/src/keyboard.h b/src/keyboard.h index c339ee9..3bcd68f 100644 --- a/src/keyboard.h +++ b/src/keyboard.h @@ -1,5 +1,5 @@ /* $Id$ */ -/* Copyright (c) 2010 Pierre Pronchery */ +/* Copyright (c) 2010-2012 Pierre Pronchery */ /* This file is part of DeforaOS Desktop Keyboard */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -48,6 +48,8 @@ Keyboard * keyboard_new(KeyboardPrefs * prefs); void keyboard_delete(Keyboard * keyboard); /* accessors */ +gboolean keyboard_is_visible(Keyboard * keyboard); + /* XXX be more explicit */ void keyboard_set_layout(Keyboard * keyboard, unsigned int which); void keyboard_set_page(Keyboard * keyboard, KeyboardPage page);