1 /*
2  * Copyright (C) 2010 Canonical Ltd
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 3 as
6  * published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
15  *
16  * Authored by: Jason Smith <jason.smith@canonical.com>
17  *
18  */
19 
20 
21 #ifndef __BAMFLEGACY_WINDOW_H__
22 #define __BAMFLEGACY_WINDOW_H__
23 
24 #include "config.h"
25 
26 #include "bamf-view.h"
27 #include <sys/types.h>
28 #include <glib.h>
29 #include <glib-object.h>
30 #include <libwnck/libwnck.h>
31 
32 #define BAMF_TYPE_LEGACY_WINDOW                 (bamf_legacy_window_get_type ())
33 #define BAMF_LEGACY_WINDOW(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), BAMF_TYPE_LEGACY_WINDOW, BamfLegacyWindow))
34 #define BAMF_IS_LEGACY_WINDOW(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), BAMF_TYPE_LEGACY_WINDOW))
35 #define BAMF_LEGACY_WINDOW_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), BAMF_TYPE_LEGACY_WINDOW, BamfLegacyWindowClass))
36 #define BAMF_IS_LEGACY_WINDOW_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), BAMF_TYPE_LEGACY_WINDOW))
37 #define BAMF_LEGACY_WINDOW_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), BAMF_TYPE_LEGACY_WINDOW, BamfLegacyWindowClass))
38 
39 #define BAMF_LEGACY_WINDOW_SIGNAL_NAME_CHANGED     "name-changed"
40 #define BAMF_LEGACY_WINDOW_SIGNAL_ROLE_CHANGED     "role-changed"
41 #define BAMF_LEGACY_WINDOW_SIGNAL_CLASS_CHANGED    "class-changed"
42 #define BAMF_LEGACY_WINDOW_SIGNAL_STATE_CHANGED    "state-changed"
43 #define BAMF_LEGACY_WINDOW_SIGNAL_GEOMETRY_CHANGED "geometry-changed"
44 #define BAMF_LEGACY_WINDOW_SIGNAL_CLOSED           "closed"
45 
46 typedef struct _BamfLegacyWindow BamfLegacyWindow;
47 typedef struct _BamfLegacyWindowClass BamfLegacyWindowClass;
48 typedef struct _BamfLegacyWindowPrivate BamfLegacyWindowPrivate;
49 
50 typedef enum
51 {
52   BAMF_WINDOW_NORMAL,       /* document/app window */
53   BAMF_WINDOW_DESKTOP,      /* desktop background */
54   BAMF_WINDOW_DOCK,         /* panel */
55   BAMF_WINDOW_DIALOG,       /* dialog */
56   BAMF_WINDOW_TOOLBAR,      /* tearoff toolbar */
57   BAMF_WINDOW_MENU,         /* tearoff menu */
58   BAMF_WINDOW_UTILITY,      /* palette/toolbox window */
59   BAMF_WINDOW_SPLASHSCREEN  /* splash screen */
60 } BamfWindowType;
61 
62 typedef enum
63 {
64   BAMF_WINDOW_FLOATING,
65   BAMF_WINDOW_HORIZONTAL_MAXIMIZED,
66   BAMF_WINDOW_VERTICAL_MAXIMIZED,
67   BAMF_WINDOW_MAXIMIZED
68 } BamfWindowMaximizationType;
69 
70 struct _BamfLegacyWindowClass
71 {
72   GObjectClass parent;
73 
74   BamfLegacyWindow * (*get_transient)     (BamfLegacyWindow *legacy_window);
75   const char * (*get_name)                (BamfLegacyWindow *legacy_window);
76   const char * (*get_role)                (BamfLegacyWindow *legacy_window);
77   const char * (*get_class_name)          (BamfLegacyWindow *legacy_window);
78   const char * (*get_class_instance_name) (BamfLegacyWindow *legacy_window);
79   const char * (*get_exec_string)         (BamfLegacyWindow *legacy_window);
80   const char * (*get_working_dir)         (BamfLegacyWindow *legacy_window);
81   char       * (*save_mini_icon)          (BamfLegacyWindow *legacy_window);
82   char       * (*get_process_name)        (BamfLegacyWindow *legacy_window);
83   char       * (*get_app_id)              (BamfLegacyWindow *legacy_window);
84   char       * (*get_unique_bus_name)     (BamfLegacyWindow *legacy_window);
85   char       * (*get_menu_object_path)    (BamfLegacyWindow *legacy_window);
86   char       * (*get_hint)                (BamfLegacyWindow *legacy_window,
87                                            const gchar *name);
88   guint        (*get_pid)                 (BamfLegacyWindow *legacy_window);
89   guint32      (*get_xid)                 (BamfLegacyWindow *legacy_window);
90   gboolean     (*needs_attention)         (BamfLegacyWindow *legacy_window);
91   gboolean     (*is_active)               (BamfLegacyWindow *legacy_window);
92   gboolean     (*is_skip_tasklist)        (BamfLegacyWindow *legacy_window);
93   gboolean     (*is_desktop)              (BamfLegacyWindow *legacy_window);
94   gboolean     (*is_dialog)               (BamfLegacyWindow *legacy_window);
95   gboolean     (*is_closed)               (BamfLegacyWindow *legacy_window);
96   BamfWindowMaximizationType (*maximized) (BamfLegacyWindow *legacy_window);
97   BamfWindowType (*get_window_type)       (BamfLegacyWindow *legacy_window);
98   void         (*get_geometry)            (BamfLegacyWindow *legacy_window,
99                                            gint *x, gint *y, gint *w, gint *h);
100   void         (*set_hint)                (BamfLegacyWindow *legacy_window,
101                                            const gchar *name, const gchar *value);
102   GtkWidget  * (*get_action_menu)         (BamfLegacyWindow *legacy_window);
103   void         (*show_action_menu)        (BamfLegacyWindow *legacy_window,
104                                            guint32 time, guint button, gint x, gint y);
105   void         (*reopen)                  (BamfLegacyWindow *legacy_window);
106 
107   /*< signals >*/
108   void     (*name_changed)     (BamfLegacyWindow *legacy_window);
109   void     (*class_changed)    (BamfLegacyWindow *legacy_window);
110   void     (*role_changed)     (BamfLegacyWindow *legacy_window);
111   void     (*state_changed)    (BamfLegacyWindow *legacy_window);
112   void     (*geometry_changed) (BamfLegacyWindow *legacy_window);
113   void     (*closed)           (BamfLegacyWindow *legacy_window);
114 };
115 
116 struct _BamfLegacyWindow
117 {
118   GObject parent;
119 
120   /* private */
121   BamfLegacyWindowPrivate *priv;
122 };
123 
124 GType              bamf_legacy_window_get_type             (void) G_GNUC_CONST;
125 
126 guint32            bamf_legacy_window_get_xid              (BamfLegacyWindow *self);
127 
128 guint              bamf_legacy_window_get_pid              (BamfLegacyWindow *self);
129 
130 void               bamf_legacy_window_get_geometry         (BamfLegacyWindow *self,
131                                                             gint *x, gint *y,
132                                                             gint *width, gint *height);
133 
134 gboolean           bamf_legacy_window_is_active            (BamfLegacyWindow *self);
135 
136 gboolean           bamf_legacy_window_is_skip_tasklist     (BamfLegacyWindow *self);
137 
138 gboolean           bamf_legacy_window_needs_attention      (BamfLegacyWindow *self);
139 
140 gboolean           bamf_legacy_window_is_closed            (BamfLegacyWindow *self);
141 
142 BamfWindowType     bamf_legacy_window_get_window_type      (BamfLegacyWindow *self);
143 
144 BamfWindowMaximizationType bamf_legacy_window_maximized    (BamfLegacyWindow *self);
145 
146 const char       * bamf_legacy_window_get_class_instance_name (BamfLegacyWindow *self);
147 
148 const char       * bamf_legacy_window_get_class_name       (BamfLegacyWindow *self);
149 
150 const char       * bamf_legacy_window_get_name             (BamfLegacyWindow *self);
151 
152 const char       * bamf_legacy_window_get_role             (BamfLegacyWindow *self);
153 
154 const char       * bamf_legacy_window_get_exec_string      (BamfLegacyWindow *self);
155 
156 const char       * bamf_legacy_window_get_working_dir      (BamfLegacyWindow *self);
157 
158 char             * bamf_legacy_window_save_mini_icon       (BamfLegacyWindow *self);
159 
160 GFile            * bamf_legacy_window_get_saved_mini_icon  (BamfLegacyWindow *self);
161 
162 char             * bamf_legacy_window_get_process_name     (BamfLegacyWindow *self);
163 
164 BamfLegacyWindow * bamf_legacy_window_get_transient        (BamfLegacyWindow *self);
165 
166 char             * bamf_legacy_window_get_hint             (BamfLegacyWindow *self,
167                                                             const char *name);
168 
169 void               bamf_legacy_window_set_hint             (BamfLegacyWindow *self,
170                                                             const char *name,
171                                                             const char *value);
172 
173 gint               bamf_legacy_window_get_stacking_position (BamfLegacyWindow *self);
174 
175 GtkWidget        * bamf_legacy_window_get_action_menu      (BamfLegacyWindow *self);
176 
177 void               bamf_legacy_window_show_action_menu     (BamfLegacyWindow *self,
178                                                             guint32 time, guint button,
179                                                             gint x, gint y);
180 
181 void               bamf_legacy_window_reopen               (BamfLegacyWindow *self);
182 
183 BamfLegacyWindow * bamf_legacy_window_new                  (WnckWindow *legacy_window);
184 
185 #endif
186 
187