]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - libs/gtkutil/widget.cpp
579ade807641312fddf03fdd4ddfcf01c9837104
[xonotic/netradiant.git] / libs / gtkutil / widget.cpp
1 #include "widget.h"
2 #include <gtk/gtk.h>
3
4 void widget_set_visible(ui::Widget widget, bool shown)
5 {
6     if (shown) {
7         widget.show();
8     } else {
9         gtk_widget_hide(widget);
10     }
11 }
12
13 bool widget_is_visible(ui::Widget widget)
14 {
15     return gtk_widget_get_visible(widget) != FALSE;
16 }
17
18 void widget_queue_draw(ui::Widget &widget)
19 {
20     gtk_widget_queue_draw(widget);
21 }
22
23 void widget_make_default(ui::Widget widget)
24 {
25     gtk_widget_set_can_default(widget, true);
26     gtk_widget_grab_default(widget);
27 }
28
29 gboolean ToggleShown::notify_visible(ui::Widget widget, gpointer dummy, ToggleShown *self)
30 {
31     self->update();
32     return FALSE;
33 }
34
35 gboolean ToggleShown::destroy(ui::Widget widget, ToggleShown *self)
36 {
37     self->m_shownDeferred = gtk_widget_get_visible(self->m_widget) != FALSE;
38     self->m_widget = ui::Widget(ui::null);
39     return FALSE;
40 }
41
42 void ToggleShown::update()
43 {
44     m_item.update();
45 }
46
47 bool ToggleShown::active() const
48 {
49     if (!m_widget) {
50         return m_shownDeferred;
51     } else {
52         return gtk_widget_get_visible(m_widget) != FALSE;
53     }
54 }
55
56 void ToggleShown::exportActive(const BoolImportCallback &importCallback)
57 {
58     importCallback(active());
59 }
60
61 void ToggleShown::set(bool shown)
62 {
63     if (!m_widget) {
64         m_shownDeferred = shown;
65     } else {
66         widget_set_visible(m_widget, shown);
67     }
68 }
69
70 void ToggleShown::toggle()
71 {
72     widget_toggle_visible(m_widget);
73 }
74
75 void ToggleShown::connect(ui::Widget widget)
76 {
77     m_widget = widget;
78     widget_set_visible(m_widget, m_shownDeferred);
79     m_widget.connect("notify::visible", G_CALLBACK(notify_visible), this);
80     m_widget.connect("destroy", G_CALLBACK(destroy), this);
81     update();
82 }
83
84 gboolean WidgetFocusPrinter::focus_in(ui::Widget widget, GdkEventFocus *event, WidgetFocusPrinter *self)
85 {
86     globalOutputStream() << self->m_name << " takes focus\n";
87     return FALSE;
88 }
89
90 gboolean WidgetFocusPrinter::focus_out(ui::Widget widget, GdkEventFocus *event, WidgetFocusPrinter *self)
91 {
92     globalOutputStream() << self->m_name << " loses focus\n";
93     return FALSE;
94 }
95
96 void WidgetFocusPrinter::connect(ui::Widget widget)
97 {
98     widget.connect("focus_in_event", G_CALLBACK(focus_in), this);
99     widget.connect("focus_out_event", G_CALLBACK(focus_out), this);
100 }