annotate src/audacious/ui_skinned_window.c @ 2494:59661bd074b4 trunk

[svn] Try to put some skinned window code in a common place.
author nenolod
date Sat, 10 Feb 2007 17:01:44 -0800
parents
children 71bee08db1c6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2494
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
1 /*
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
2 * Audacious: A cross-platform multimedia player
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
3 * Copyright (c) 2007 William Pitcock <nenolod -at- sacredspiral.co.uk>
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
4 *
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
5 * This program is free software; you can redistribute it and/or modify
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
6 * it under the terms of the GNU General Public License as published by
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
7 * the Free Software Foundation; under version 2 of the License.
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
8 *
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
9 * This program is distributed in the hope that it will be useful,
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
12 * GNU General Public License for more details.
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
13 *
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
14 * You should have received a copy of the GNU General Public License
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
15 * along with this program; if not, write to the Free Software
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
17 * 02110-1301, USA.
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
18 */
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
19
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
20 #include "platform/smartinclude.h"
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
21
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
22 #include <gtk/gtkmain.h>
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
23 #include <glib-object.h>
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
24 #include <glib/gmacros.h>
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
25 #include <gtk/gtkmarshal.h>
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
26 #include <gtk/gtkwindow.h>
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
27
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
28 #include "main.h"
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
29 #include "dock.h"
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
30 #include "ui_skinned_window.h"
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
31 #include "ui_skinned_cursor.h"
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
32
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
33 static void ui_skinned_window_class_init(SkinnedWindowClass *klass);
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
34 static void ui_skinned_window_init(GtkWidget *widget);
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
35 static GtkWindowClass *parent = NULL;
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
36
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
37 GType
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
38 ui_skinned_window_get_type(void)
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
39 {
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
40 static GType window_type = 0;
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
41
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
42 if (!window_type)
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
43 {
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
44 static const GTypeInfo window_info =
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
45 {
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
46 sizeof (SkinnedWindowClass),
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
47 NULL, /* base_init */
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
48 NULL, /* base_finalize */
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
49 (GClassInitFunc) ui_skinned_window_class_init,
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
50 NULL, /* class_finalize */
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
51 NULL, /* class_data */
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
52 sizeof (SkinnedWindow),
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
53 0, /* n_preallocs */
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
54 (GInstanceInitFunc) ui_skinned_window_init
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
55 };
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
56
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
57 window_type =
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
58 g_type_register_static (GTK_TYPE_WINDOW, "SkinnedWindow",
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
59 &window_info, 0);
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
60 }
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
61
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
62 return window_type;
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
63 }
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
64
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
65 static gboolean
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
66 ui_skinned_window_configure(GtkWidget *widget,
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
67 GdkEventConfigure *event)
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
68 {
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
69 GtkWidgetClass *widget_class;
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
70 SkinnedWindow *window = SKINNED_WINDOW(widget);
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
71
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
72 widget_class = (GtkWidgetClass*) parent;
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
73
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
74 if (widget_class->configure_event != NULL)
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
75 widget_class->configure_event(widget, event);
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
76
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
77 window->x = event->x;
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
78 window->y = event->y;
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
79
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
80 return FALSE;
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
81 }
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
82
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
83 static gboolean
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
84 ui_skinned_window_motion_notify_event(GtkWidget *widget,
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
85 GdkEventMotion *event)
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
86 {
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
87 GtkWidgetClass *widget_class;
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
88
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
89 widget_class = (GtkWidgetClass*) parent;
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
90
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
91 if (widget_class->motion_notify_event != NULL)
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
92 widget_class->motion_notify_event(widget, event);
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
93
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
94 if (dock_is_moving(GTK_WINDOW(widget)))
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
95 dock_move_motion(GTK_WINDOW(widget), event);
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
96
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
97 return FALSE;
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
98 }
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
99
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
100 static void
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
101 ui_skinned_window_class_init(SkinnedWindowClass *klass)
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
102 {
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
103 GtkWidgetClass *widget_class;
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
104
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
105 widget_class = (GtkWidgetClass*) klass;
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
106
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
107 parent = gtk_type_class(gtk_window_get_type());
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
108
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
109 widget_class->configure_event = ui_skinned_window_configure;
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
110 widget_class->motion_notify_event = ui_skinned_window_motion_notify_event;
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
111 }
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
112
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
113 void
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
114 ui_skinned_window_hide(SkinnedWindow *window)
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
115 {
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
116 g_return_if_fail(SKINNED_CHECK_WINDOW(window));
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
117
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
118 gtk_window_get_position(GTK_WINDOW(window), &window->x, &window->y);
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
119 gtk_widget_hide(GTK_WIDGET(window));
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
120 }
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
121
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
122 void
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
123 ui_skinned_window_show(SkinnedWindow *window)
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
124 {
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
125 g_return_if_fail(SKINNED_CHECK_WINDOW(window));
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
126
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
127 gtk_window_move(GTK_WINDOW(window), window->x, window->y);
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
128 gtk_widget_show_all(GTK_WIDGET(window));
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
129 }
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
130
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
131 static void
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
132 ui_skinned_window_init(GtkWidget *widget)
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
133 {
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
134 SkinnedWindow *window;
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
135 window = SKINNED_WINDOW(widget);
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
136 }
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
137
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
138 GtkWidget *
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
139 ui_skinned_window_new(GtkWindowType type)
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
140 {
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
141 GtkWidget *widget = g_object_new(ui_skinned_window_get_type(), NULL);
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
142
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
143 gtk_widget_add_events(GTK_WIDGET(widget),
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
144 GDK_FOCUS_CHANGE_MASK | GDK_BUTTON_MOTION_MASK |
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
145 GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
146 GDK_SCROLL_MASK | GDK_KEY_PRESS_MASK |
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
147 GDK_VISIBILITY_NOTIFY_MASK);
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
148 gtk_widget_realize(GTK_WIDGET(widget));
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
149
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
150 dock_window_list = dock_window_set_decorated(dock_window_list,
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
151 GTK_WINDOW(widget), cfg.show_wm_decorations);
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
152 gtk_widget_set_app_paintable(GTK_WIDGET(widget), TRUE);
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
153
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
154 ui_skinned_cursor_set(GTK_WIDGET(widget));
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
155
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
156 return widget;
59661bd074b4 [svn] Try to put some skinned window code in a common place.
nenolod
parents:
diff changeset
157 }