Get rid of xml-purge file.
[lxde/lxpanel.git] / src / private.h
CommitLineData
b31cb1d2
AG
1/**
2 * Copyright (c) 2006 LxDE Developers, see the file AUTHORS for details.
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 as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software Foundation,
16 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 */
18
19#ifndef PRIVATE_H
20#define PRIVATE_H
21
17fab6e5
AG
22#include "plugin.h"
23#include "conf.h"
b31cb1d2
AG
24
25#include <gmodule.h>
26
27#include <gtk/gtk.h>
28#include <gdk/gdk.h>
29#include <stdio.h>
30#include "panel.h"
31
32#include <gdk/gdk.h>
33
34#include "bg.h"
35#include "ev.h"
36
908d9fdc
AG
37/* -----------------------------------------------------------------------------
38 * Definitions used by lxpanel main code internally */
39
b31cb1d2
AG
40/* Extracted from panel.h */
41enum { ALLIGN_NONE, ALLIGN_LEFT, ALLIGN_CENTER, ALLIGN_RIGHT };
42enum { EDGE_NONE=0, EDGE_LEFT, EDGE_RIGHT, EDGE_TOP, EDGE_BOTTOM };
43enum { WIDTH_NONE, WIDTH_REQUEST, WIDTH_PIXEL, WIDTH_PERCENT };
44enum { HEIGHT_NONE, HEIGHT_PIXEL, HEIGHT_REQUEST };
45enum {
46 ORIENT_NONE = -1,
47 ORIENT_VERT = GTK_ORIENTATION_VERTICAL,
48 ORIENT_HORIZ = GTK_ORIENTATION_HORIZONTAL
49};
b31cb1d2
AG
50
51#define PANEL_ICON_SIZE 24 /* Default size of panel icons */
52#define PANEL_HEIGHT_DEFAULT 26 /* Default height of horizontal panel */
53#define PANEL_WIDTH_DEFAULT 150 /* Default "height" of vertical panel */
54#define PANEL_HEIGHT_MAX 200 /* Maximum height of panel */
55#define PANEL_HEIGHT_MIN 16 /* Minimum height of panel */
56#define PANEL_ICON_HIGHLIGHT 0x202020 /* Constant to pass to icon loader */
57
58/* to check if we are in LXDE */
59extern gboolean is_in_lxde;
60
61/* Context of a panel on a given edge. */
62struct _Panel {
63 char* name;
64 GtkWidget * topgwin; /* Main panel window */
65 Window topxwin; /* Main panel's X window */
66 GdkDisplay * display; /* Main panel's GdkDisplay */
67 GtkStyle * defstyle;
68 GtkIconTheme* icon_theme; /*Default icon theme*/
69
70 GtkWidget * box; /* Top level widget */
71
72 GtkRequisition requisition;
73 GtkWidget *(*my_box_new) (gboolean, gint);
74 GtkWidget *(*my_separator_new) ();
75
76 FbBg *bg;
77 int alpha;
78 guint32 tintcolor;
79 guint32 fontcolor;
80 GdkColor gtintcolor;
81 GdkColor gfontcolor;
82
83 int ax, ay, aw, ah; /* prefferd allocation of a panel */
84 int cx, cy, cw, ch; /* current allocation (as reported by configure event) allocation */
85 int allign, edge, margin;
86 int orientation;
87 int widthtype, width;
88 int heighttype, height;
89 gint monitor;
90 gulong strut_size; /* Values for WM_STRUT_PARTIAL */
91 gulong strut_lower;
92 gulong strut_upper;
93 int strut_edge;
94
95 guint config_changed : 1;
96 guint self_destroy : 1;
97 guint setdocktype : 1;
98 guint setstrut : 1;
99 guint round_corners : 1;
100 guint usefontcolor : 1;
101 guint usefontsize : 1;
102 guint fontsize;
103 guint transparent : 1;
104 guint background : 1;
105 guint spacing;
106
107 guint autohide : 1;
108 guint visible : 1;
109 int height_when_hidden;
110 guint hide_timeout;
111 int icon_size; /* Icon size */
112
113 int desknum;
114 int curdesk;
115 guint32 *workarea;
116 int wa_len;
117
118 char* background_file;
119
b31cb1d2 120 GSList * system_menus; /* List of plugins having menus */
17fab6e5 121 PanelConf * config; /* Panel configuration data */
b31cb1d2
AG
122
123 GtkWidget* plugin_pref_dialog; /* Plugin preference dialog */
124 GtkWidget* pref_dialog; /* preference dialog */
125 GtkWidget* margin_control; /* Margin control in preference dialog */
126 GtkWidget* height_label; /* Label of height control */
127 GtkWidget* width_label; /* Label of width control */
128 GtkWidget* alignment_left_label; /* Label of alignment: left control */
129 GtkWidget* alignment_right_label; /* Label of alignment: right control */
130 GtkWidget* height_control; /* Height control in preference dialog */
131 GtkWidget* width_control; /* Width control in preference dialog */
132};
133
134typedef struct {
135 char *name;
136 char *disp_name;
137 void (*cmd)(void);
138} Command;
139
140extern Command commands[];
141
142extern FbEv *fbev;
143
144#define FBPANEL_WIN(win) gdk_window_lookup(win)
145
b31cb1d2 146/* Extracted from misc.h */
b31cb1d2
AG
147typedef struct {
148 int num;
149 gchar *str;
150} pair;
151
152extern pair allign_pair[];
153extern pair edge_pair[];
154extern pair width_pair[];
155extern pair height_pair[];
156extern pair bool_pair[];
b31cb1d2 157
17fab6e5
AG
158int str2num(pair *p, const gchar *str, int defval);
159const gchar *num2str(pair *p, int num, const gchar *defval);
b31cb1d2 160
908d9fdc
AG
161char* get_config_file( const char* profile, const char* file_name, gboolean is_global );
162
163/* Extracted from plugin.h */
164
165
166/* -----------------------------------------------------------------------------
167 * Deprecated declarations. Kept for compatibility with old code plugins.
168 * Should be removed and appropriate code cleaned on some of next releases. */
169
170/* Extracted from misc.h */
171typedef struct _Plugin Plugin;
172
173enum { LINE_NONE, LINE_BLOCK_START, LINE_BLOCK_END, LINE_VAR };
174
175typedef struct {
176 int num, len, type;
177 gchar str[256];
178 gchar *t[3];
179} line;
180
181
b31cb1d2
AG
182extern int lxpanel_get_line(char **fp, line *s);
183extern int lxpanel_put_line(FILE* fp, const char* format, ...);
184#define lxpanel_put_str(fp, name, val) (G_UNLIKELY( !(val) || !*(val) )) ? 0 : lxpanel_put_line(fp, "%s=%s", name, val)
185#define lxpanel_put_bool(fp, name, val) lxpanel_put_line(fp, "%s=%c", name, (val) ? '1' : '0')
186#define lxpanel_put_int(fp, name, val) lxpanel_put_line(fp, "%s=%d", name, val)
b31cb1d2
AG
187
188GtkWidget *_gtk_image_new_from_file_scaled(const gchar *file, gint width,
189 gint height, gboolean keep_ratio);
190
c8e5ebb2
AG
191GtkWidget * fb_button_new_from_file(
192 const gchar * image_file, int width, int height, gulong highlight_color, gboolean keep_ratio);
193GtkWidget * fb_button_new_from_file_with_label(
194 const gchar * image_file, int width, int height, gulong highlight_color, gboolean keep_ratio, Panel * panel, gchar * label);
195
196void fb_button_set_from_file(GtkWidget* btn, const char* img_file, gint width, gint height, gboolean keep_ratio);
197
b31cb1d2
AG
198char* translate_exec_to_cmd( const char* exec, const char* icon,
199 const char* title, const char* fpath );
200
201void show_error( GtkWindow* parent_win, const char* msg );
202
aaaef690
AG
203gboolean spawn_command_async(GtkWindow *parent_window, gchar const* workdir,
204 gchar const* cmd);
205
b31cb1d2
AG
206/* Parameters: const char* name, gpointer ret_value, GType type, ....NULL */
207GtkWidget* create_generic_config_dlg( const char* title, GtkWidget* parent,
208 GSourceFunc apply_func, Plugin * plugin,
209 const char* name, ... );
210
211extern GtkMenu* lxpanel_get_panel_menu( Panel* panel, Plugin* plugin, gboolean use_sub_menu );
212
213gboolean lxpanel_launch_app(const char* exec, GList* files, gboolean in_terminal, char const* in_workdir);
214
63e2d9e5
AG
215extern GdkPixbuf* lxpanel_load_icon( const char* name, int width, int height, gboolean use_fallback );
216
b31cb1d2
AG
217
218/* Extracted from plugin.h */
219struct _Plugin;
220
221/* Support for external plugin versioning.
222 * Plugins must invoke PLUGINCLASS_VERSIONING when they instantiate PluginClass. */
223#define PLUGINCLASS_VERSION 1
224#define PLUGINCLASS_VERSIONING \
225 .structure_size = sizeof(PluginClass), \
226 .structure_version = PLUGINCLASS_VERSION
227
228/* Representative of an available plugin. */
229typedef struct {
230
231 /* Keep these first. Do not make unnecessary changes in structure layout. */
232 unsigned short structure_size; /* Structure size, for versioning support */
233 unsigned short structure_version; /* Structure version, for versioning support */
234
235 char * fname; /* Plugin file pathname */
236 int count; /* Reference count */
237 GModule * gmodule; /* Associated GModule structure */
238
239 int dynamic : 1; /* True if dynamically loaded */
240 int unused_invisible : 1; /* Unused; reserved bit */
241 int not_unloadable : 1; /* Not unloadable due to GModule restriction */
242 int one_per_system : 1; /* Special: only one possible per system, such as system tray */
243 int one_per_system_instantiated : 1; /* True if one instance exists */
244 int expand_available : 1; /* True if "stretch" option is available */
245 int expand_default : 1; /* True if "stretch" option is default */
246
247 /* These fields point within the plugin image. */
248 char * type; /* Internal name of plugin, to match external filename */
249 char * name; /* Display name of plugin for selection UI */
250 char * version; /* Version of plugin */
251 char * description; /* Brief textual description of plugin for selection UI */
252
253 int (*constructor)(struct _Plugin * plugin, char ** fp); /* Create an instance of the plugin */
254 void (*destructor)(struct _Plugin * plugin); /* Destroy an instance of the plugin */
255 void (*config)(struct _Plugin * plugin, GtkWindow * parent); /* Request the plugin to display its configuration dialog */
256 void (*save)(struct _Plugin * plugin, FILE * fp); /* Request the plugin to save its configuration to a file */
257 void (*panel_configuration_changed)(struct _Plugin * plugin); /* Request the plugin to do a full redraw after a panel configuration change */
258} PluginClass;
259
260/* Representative of a loaded and active plugin attached to a panel. */
261struct _Plugin {
262 PluginClass * class; /* Back pointer to PluginClass */
263 Panel * panel; /* Back pointer to Panel */
264 GtkWidget * pwid; /* Top level widget; plugin allocates, but plugin mechanism, not plugin itself, destroys this */
265 int expand; /* Expand ("stretch") setting for container */
266 int padding; /* Padding setting for container */
267 int border; /* Border setting for container */
268 gpointer priv; /* Private context for plugin; plugin frees this in its destructor */
269};
270
271/* Plugins management - deprecated style, for backward compatibility */
b31cb1d2
AG
272extern gboolean plugin_button_press_event(GtkWidget *widget, GdkEventButton *event, Plugin *plugin);
273 /* Handler for "button_press_event" signal with Plugin as parameter */
274extern void plugin_adjust_popup_position(GtkWidget * popup, Plugin * plugin);
275 /* Helper to move popup windows away from the panel */
276extern void plugin_popup_set_position_helper(Plugin * p, GtkWidget * near, GtkWidget * popup, GtkRequisition * popup_req, gint * px, gint * py);
277 /* Helper for position-calculation callback for popup menus */
278
908d9fdc
AG
279
280/* -------------------------------------------------------------------------- */
b31cb1d2
AG
281/* FIXME: optional definitions */
282#define STATIC_SEPARATOR
283#define STATIC_LAUNCHBAR
284#define STATIC_DCLOCK
285#define STATIC_WINCMD
286#define STATIC_DIRMENU
287#define STATIC_TASKBAR
288#define STATIC_PAGER
289#define STATIC_TRAY
290#define STATIC_MENU
291#define STATIC_SPACE
292#define STATIC_ICONS
293
294/* Plugins management - new style */
17fab6e5
AG
295void _prepare_modules(void);
296void _unload_modules(void);
297
298GtkWidget *lxpanel_add_plugin(Panel *p, const char *name, config_setting_t *cfg, gint at);
299GHashTable *lxpanel_get_all_types(void); /* transfer none */
b31cb1d2
AG
300
301GQuark lxpanel_plugin_qinit; /* access to LXPanelPluginInit data */
17fab6e5 302#define PLUGIN_CLASS(_i) ((LXPanelPluginInit*)g_object_get_qdata(G_OBJECT(_i),lxpanel_plugin_qinit))
b31cb1d2
AG
303
304GQuark lxpanel_plugin_qconf; /* access to congig_setting_t data */
305
17fab6e5
AG
306GQuark lxpanel_plugin_qpanel; /* access to Panel */
307#define PLUGIN_PANEL(_i) ((Panel*)g_object_get_qdata(G_OBJECT(_i),lxpanel_plugin_qpanel))
308
b31cb1d2 309#endif