Updating branch refs/heads/0.6.x
to 42838e22732a9bfa8097079df3e78e65bf4495ae (commit)
from a5a23d4397b58043b04917f9139adbf66735f624 (commit)
commit 42838e22732a9bfa8097079df3e78e65bf4495ae
Author: Andre Ellguth <[email protected]>
Date: Thu Sep 26 21:57:54 2013 +0200
Some changes on dockapp background drawing.
panel-plugin/catchwindow.c | 23 +++++----
panel-plugin/dockapp.c | 114 +++++++++++++++++++++++++++++++-------------
panel-plugin/dockapp.h | 25 ++++++----
3 files changed, 109 insertions(+), 53 deletions(-)
diff --git a/panel-plugin/catchwindow.c b/panel-plugin/catchwindow.c
index e12ef92..2a2252e 100644
--- a/panel-plugin/catchwindow.c
+++ b/panel-plugin/catchwindow.c
@@ -140,9 +140,7 @@ void wmdock_window_open(WnckScreen *s, WnckWindow *w)
return;
}
debug("catchwindow.c: found cmd %s for window %s", cmd,
wnck_window_get_name(w));
-
- if(rcCmds && (dapp = wmdock_find_startup_dockapp(cmd)))
- rcDapp = TRUE;
+ rcDapp = rcCmds && (dapp = wmdock_find_startup_dockapp(cmd)) ?
TRUE : FALSE;
if(rcDapp == FALSE) {
debug("catchwindow.c: Create a new dapp window %s",
wnck_window_get_name(w));
@@ -152,15 +150,13 @@ void wmdock_window_open(WnckScreen *s, WnckWindow *w)
}
if(h->initial_state == WithdrawnState && h->icon_window) {
-
XUnmapWindow(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()),
- wnck_window_get_xid(w));
+
XUnmapWindow(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()),
wnck_window_get_xid(w));
dapp->i =h->icon_window;
} else {
dapp->i = wnck_window_get_xid(w);
}
-
if(!XGetWindowAttributes(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()),
- dapp->i, &attr)) {
+
if(!XGetWindowAttributes(GDK_DISPLAY_XDISPLAY(get_current_gdkdisplay()),
dapp->i, &attr)) {
wi = DEFAULT_DOCKAPP_WIDTH;
he = DEFAULT_DOCKAPP_HEIGHT;
} else {
@@ -191,6 +187,8 @@ void wmdock_window_open(WnckScreen *s, WnckWindow *w)
dapp->name = g_strdup(wnck_window_get_name(w));
dapp->cmd = cmd;
+ dapp->width = wi;
+ dapp->height = he;
if(wmdockIcon && !IS_PANELOFF(wmdock)) {
gtk_widget_destroy(wmdockIcon);
@@ -214,6 +212,9 @@ void wmdock_window_open(WnckScreen *s, WnckWindow *w)
wmdock_set_autoposition_dockapp(dapp,
g_list_last(wmdock->dapps) ?
g_list_last(wmdock->dapps)->data : NULL);
}
+ } else {
+ /* Change the postion of the DockApp with the newly
determined width and height. of the window */
+ wmdock_set_socket_postion(dapp, (DEFAULT_DOCKAPP_WIDTH
- wi) / 2, (DEFAULT_DOCKAPP_HEIGHT - he) / 2);
}
gtk_socket_add_id(dapp->s, dapp->i);
@@ -234,15 +235,17 @@ void wmdock_window_open(WnckScreen *s, WnckWindow *w)
if( IS_PANELOFF(wmdock) ) {
if(rcDapp == TRUE) {
_dapps = g_list_find(wmdock->dapps,
(gconstpointer) dapp);
- wmdock_set_autoposition_dockapp( dapp,
-
(DOCKAPP(g_list_first(wmdock->dapps)->data) != dapp && _dapps) ?
+ wmdock_set_autoposition_dockapp( dapp,
(DOCKAPP(g_list_first(wmdock->dapps)->data) != dapp && _dapps) ?
DOCKAPP(((GList
*) g_list_previous(_dapps))->data) : NULL);
wmdock_order_dockapps(DOCKAPP(g_list_first(wmdock->dapps)->data));
}
/* Setup the event handler for the window. */
- g_signal_connect(dapp->tile, "event-after",
G_CALLBACK(wmdock_dockapp_paneloff_handler), dapp);
+ g_signal_connect(G_OBJECT(dapp->tile), "event-after",
G_CALLBACK(wmdock_dockapp_event_after_handler), dapp);
+ g_signal_connect(G_OBJECT(dapp->tile),
"motion_notify_event", G_CALLBACK(wmdock_dockapp_motion_notify_handler), dapp);
+ g_signal_connect(G_OBJECT(dapp->tile),
"button_press_event", G_CALLBACK(wmdock_dockapp_button_press_handler), dapp);
+ g_signal_connect(G_OBJECT(dapp->tile),
"button_release_event", G_CALLBACK(wmdock_dockapp_button_release_handler),
dapp);
}
/* Clear the noisy background. */
wmdock_redraw_dockapp(dapp);
diff --git a/panel-plugin/dockapp.c b/panel-plugin/dockapp.c
index 06eac91..812852f 100644
--- a/panel-plugin/dockapp.c
+++ b/panel-plugin/dockapp.c
@@ -287,13 +287,53 @@ static gboolean wmdock_replace_tile_dummy(DockappNode
*dapp)
/**
- * Event handler for the tile in panel off mode.
+ * Event handle for the tile in panel off mode (button_press)
+ *
+ * @param tile The window of the event.
+ * @param ev GdkEventButton.
+ * @param dapp DockAppNode of the event.
+ */
+void wmdock_dockapp_button_press_handler(GtkWidget *tile, GdkEventButton *ev,
DockappNode *dapp)
+{
+ debug("dockapp.c: Window button press event (dapp: `%s')", dapp->name);
+}
+
+
+/**
+ * Event handle for the tile in panel off mode (button_release)
+ *
+ * @param tile The window of the event.
+ * @param ev GdkEventButton.
+ * @param dapp DockAppNode of the event.
+ */
+void wmdock_dockapp_button_release_handler(GtkWidget *tile, GdkEventButton
*ev, DockappNode *dapp)
+{
+ debug("dockapp.c: Window button release event (dapp: `%s')",
dapp->name);
+}
+
+
+/**
+ * Event handle for the tile in panel off mode (motion_notify)
+ *
+ * @param tile The window of the event.
+ * @param ev GdkEventButton.
+ * @param dapp DockAppNode of the event.
+ */
+void wmdock_dockapp_motion_notify_handler(GtkWidget *tile, GdkEventMotion *ev,
DockappNode *dapp)
+{
+ debug("dockapp.c: Window motion notify event (dapp: `%s')", dapp->name);
+}
+
+
+
+/**
+ * Event handler for the tile in panel off mode (event_after).
*
* @param tile The window of the event.
* @param ev Event informations.
* @param dapp DockappNode of the event.
*/
-void wmdock_dockapp_paneloff_handler(GtkWidget *tile, GdkEvent *ev,
DockappNode *dapp)
+void wmdock_dockapp_event_after_handler(GtkWidget *tile, GdkEvent *ev,
DockappNode *dapp)
{
static DockappNode *dappOnMove = NULL, *dappDummy = NULL;
DockappNode *dappSnap = NULL;
@@ -591,17 +631,16 @@ void wmdock_redraw_dockapp(DockappNode *dapp)
*/
void wmdock_update_tile_background(DockappNode *dapp)
{
- gtk_widget_realize(GTK_WIDGET(dapp->s));
+ gtk_widget_realize(GTK_WIDGET(dapp->bg));
if (!dapp->bgimg)
return;
- gtk_widget_set_app_paintable(GTK_WIDGET(dapp->s), TRUE);
- gdk_window_set_back_pixmap(GTK_WIDGET(dapp->s)->window, dapp->bgimg,
FALSE);
-
- if (GTK_WIDGET_FLAGS(GTK_WIDGET(dapp->s)) & GTK_MAPPED)
- gtk_widget_queue_draw(GTK_WIDGET(dapp->s));
+ gtk_widget_set_app_paintable(GTK_WIDGET(dapp->bg), TRUE);
+ gdk_window_set_back_pixmap(GTK_WIDGET(dapp->bg)->window, dapp->bgimg,
FALSE);
+ if (GTK_WIDGET_FLAGS(GTK_WIDGET(dapp->bg)) & GTK_MAPPED)
+ gtk_widget_queue_draw(GTK_WIDGET(dapp->bg));
}
@@ -659,12 +698,8 @@ DockappNode *wmdock_get_parent_dockapp(DockappNode *dapp) {
*/
void wmdock_set_tile_background(DockappNode *dapp, GdkPixbuf *pb)
{
- GtkFixed *fixed = NULL;
GdkGC * gc = NULL;
- if(!(fixed = (GtkFixed *) gtk_widget_get_ancestor(GTK_WIDGET(dapp->s),
GTK_TYPE_FIXED)))
- return;
-
if(wmdock->propDispTile == FALSE) {
if(!dapp->bg)
return;
@@ -679,23 +714,33 @@ void wmdock_set_tile_background(DockappNode *dapp,
GdkPixbuf *pb)
return;
}
- debug("dockapp.c: Setup background image
(wmdock_set_tile_background).");
- gtk_widget_realize(GTK_WIDGET(dapp->tile));
+ debug("dockapp.c: Setup background image for dapp `%s'
(wmdock_set_tile_background).", dapp->name);
+ gtk_widget_realize(GTK_WIDGET(dapp->bg));
dapp->bgimg = gdk_pixmap_new(GTK_WIDGET(dapp->tile)->window,
DEFAULT_DOCKAPP_WIDTH,DEFAULT_DOCKAPP_HEIGHT, -1);
- gc = gdk_gc_new(GTK_WIDGET(dapp->tile)->window);
+ gdk_window_clear(GTK_WIDGET(dapp->bg)->window);
+ gc = gdk_gc_new(GTK_WIDGET(dapp->bg)->window);
gdk_draw_pixbuf(dapp->bgimg, gc,
pb, 0, 0, 0, 0, DEFAULT_DOCKAPP_WIDTH,
DEFAULT_DOCKAPP_HEIGHT,
GDK_RGB_DITHER_NONE, 0, 0);
gdk_gc_unref(gc);
- gtk_image_clear(GTK_IMAGE(dapp->bg));
- gtk_image_set_from_pixmap(GTK_IMAGE(dapp->bg),dapp->bgimg,NULL);
-
- if(dapp->s)
+ if(dapp->bg)
wmdock_update_tile_background(dapp);
+
+}
+
+
+void wmdock_set_socket_postion(DockappNode *dapp, int x, int y)
+{
+ GtkFixed *fixed = NULL;
+
+ if(!(fixed = (GtkFixed *) gtk_widget_get_ancestor(GTK_WIDGET(dapp->s),
GTK_TYPE_FIXED)))
+ return;
+
+ gtk_fixed_move(fixed, GTK_WIDGET(dapp->s), x, y);
}
@@ -733,8 +778,7 @@ GtkWidget *wmdock_create_tile_from_socket(DockappNode *dapp)
tile = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(tile), dapp->name);
- gtk_window_set_default_size(GTK_WINDOW(tile),
DEFAULT_DOCKAPP_WIDTH,
- DEFAULT_DOCKAPP_HEIGHT);
+ gtk_window_set_default_size(GTK_WINDOW(tile),
DEFAULT_DOCKAPP_WIDTH, DEFAULT_DOCKAPP_HEIGHT);
gtk_container_set_border_width(GTK_CONTAINER(tile), 0);
/* Disable window shrinking resizing and growing. */
@@ -748,28 +792,30 @@ GtkWidget *wmdock_create_tile_from_socket(DockappNode
*dapp)
gtk_window_set_skip_taskbar_hint(GTK_WINDOW(tile), TRUE);
gtk_window_set_skip_pager_hint(GTK_WINDOW(tile), TRUE);
+ /* Create an eventbox to catch all click and motion events. */
+ dapp->evbox = gtk_event_box_new();
+ gtk_event_box_set_above_child(GTK_EVENT_BOX(dapp->evbox), TRUE);
+ gtk_widget_set_size_request(GTK_WIDGET(dapp->evbox),
DEFAULT_DOCKAPP_WIDTH, DEFAULT_DOCKAPP_HEIGHT);
+
/* Add the background tile. */
- dapp->bg = gtk_image_new();
- gtk_fixed_put(GTK_FIXED(fixed), dapp->bg, 0, 0);
+ dapp->bg = gtk_image_new_from_pixbuf(gdkPbTileDefault);
+ gtk_widget_set_size_request(GTK_WIDGET(dapp->bg),
DEFAULT_DOCKAPP_WIDTH, DEFAULT_DOCKAPP_HEIGHT);
+ gtk_container_add(GTK_CONTAINER(dapp->evbox), dapp->bg);
- /* Center Dockapp in the window. */
- align = gtk_alignment_new(0.5, 0.5, 0, 0);
- gtk_widget_set_size_request(GTK_WIDGET(align),
DEFAULT_DOCKAPP_WIDTH,
- DEFAULT_DOCKAPP_HEIGHT);
- gtk_window_set_default_size(GTK_WINDOW(tile),
DEFAULT_DOCKAPP_WIDTH,
- DEFAULT_DOCKAPP_HEIGHT);
- gtk_container_add(GTK_CONTAINER(align), GTK_WIDGET(dapp->s));
- /* Add the alignment container to the window. */
- gtk_fixed_put(GTK_FIXED(fixed), align, 0, 0);
+ /* Add the eventbox to the window. */
+ gtk_fixed_put(GTK_FIXED(fixed), dapp->evbox, 0, 0);
+
+ /* Add the GtkSocket with the dockapp fixed and centered. */
+ gtk_fixed_put(GTK_FIXED(fixed), GTK_WIDGET(dapp->s),
+ (DEFAULT_DOCKAPP_WIDTH - dapp->width) / 2,
(DEFAULT_DOCKAPP_HEIGHT - dapp->height) / 2);
gtk_container_add(GTK_CONTAINER(tile), fixed);
- gtk_widget_show(align);
+ gtk_widget_show(fixed);
}
return (tile);
}
-
/**
* Calculate the position of the DockApp if the PanelOff mode is active.
*
diff --git a/panel-plugin/dockapp.h b/panel-plugin/dockapp.h
index 21cb884..2687107 100644
--- a/panel-plugin/dockapp.h
+++ b/panel-plugin/dockapp.h
@@ -35,14 +35,17 @@ enum GluePosition {
typedef struct _dockapp DockappNode;
struct _dockapp {
- GtkSocket *s;
- GdkNativeWindow i;
- GtkWidget *bg;
- GdkPixmap *bgimg;
- GtkWidget *tile;
- gchar *name;
- gchar *cmd;
- DockappNode *glue[GLUE_MAX];
+ GtkSocket *s;
+ GdkNativeWindow i;
+ int width;
+ int height;
+ GtkWidget *bg;
+ GdkPixmap *bgimg;
+ GtkWidget *evbox;
+ GtkWidget *tile;
+ gchar *name;
+ gchar *cmd;
+ DockappNode *glue[GLUE_MAX];
};
#define DOCKAPP_DUMMY_TITLE "__WMDOCK_dummy__"
@@ -56,6 +59,7 @@ void wmdock_free_dockapp(DockappNode *);
void wmdock_dapp_closed(GtkSocket *, DockappNode *);
DockappNode *wmdock_find_startup_dockapp(const gchar *);
GtkWidget *wmdock_create_tile_from_socket(DockappNode *);
+void wmdock_set_socket_postion(DockappNode *, int, int);
void wmdock_set_autoposition_dockapp(DockappNode *, DockappNode *);
void wmdock_refresh_bg(GtkWidget *widget);
void wmdock_set_tile_background(DockappNode *, GdkPixbuf *);
@@ -63,7 +67,10 @@ void wmdock_update_tile_background(DockappNode *);
gboolean wmdock_is_first_dockapp(DockappNode *);
DockappNode *wmdock_get_parent_dockapp(DockappNode *);
void wmdock_dockapp_tofront(DockappNode *dapp);
-void wmdock_dockapp_paneloff_handler(GtkWidget *, GdkEvent *, DockappNode *);
+void wmdock_dockapp_event_after_handler(GtkWidget *, GdkEvent *, DockappNode
*);
+void wmdock_dockapp_button_press_handler(GtkWidget *, GdkEventButton *,
DockappNode *);
+void wmdock_dockapp_button_release_handler(GtkWidget *, GdkEventButton *,
DockappNode *);
+void wmdock_dockapp_motion_notify_handler(GtkWidget *, GdkEventMotion *,
DockappNode *);
void wmdock_remove_anchor_dockapp(DockappNode *, DockappNode *);
void wmdock_order_dockapps(DockappNode *);
GtkWidget *wmdock_create_tile_dummy();
_______________________________________________
Xfce4-commits mailing list
[email protected]
https://mail.xfce.org/mailman/listinfo/xfce4-commits