[Xfce4-commits] [apps/xfdashboard] 01/01: Revert "Split out window actor of XfdashboardLiveWorkspace into a new fully themable actor"
noreply at xfce.org
noreply at xfce.org
Wed May 20 15:40:44 CEST 2015
This is an automated email from the git hooks/post-receive script.
nomad pushed a commit to branch master
in repository apps/xfdashboard.
commit 97c4d56ee1ae9f9f06088c69000a1be6f718752a
Author: Stephan Haller <nomad at froevel.de>
Date: Wed May 20 15:36:00 2015 +0200
Revert "Split out window actor of XfdashboardLiveWorkspace into a new fully themable actor"
This reverts commit 729bbb9ff2e012ecf995691bb7bd9e510cae0e68.
This commit caused lot of usability and stability problems as described at issue GH #44. Reverting this commit reopens issue GH #89
---
xfdashboard/Makefile.am | 2 -
xfdashboard/live-workspace-window.c | 935 -----------------------------------
xfdashboard/live-workspace-window.h | 105 ----
xfdashboard/live-workspace.c | 134 ++++-
xfdashboard/live-workspace.h | 3 +
5 files changed, 120 insertions(+), 1059 deletions(-)
diff --git a/xfdashboard/Makefile.am b/xfdashboard/Makefile.am
index 00b73b3..d3d15a8 100644
--- a/xfdashboard/Makefile.am
+++ b/xfdashboard/Makefile.am
@@ -43,7 +43,6 @@ xfdashboard_headers = \
image-content.h \
live-window.h \
live-workspace.h \
- live-workspace-window.h \
outline-effect.h \
quicklaunch.h \
scaled-table-layout.h \
@@ -106,7 +105,6 @@ xfdashboard_SOURCES = \
image-content.c \
live-window.c \
live-workspace.c \
- live-workspace-window.c \
main.c \
outline-effect.c \
quicklaunch.c \
diff --git a/xfdashboard/live-workspace-window.c b/xfdashboard/live-workspace-window.c
deleted file mode 100644
index 0867067..0000000
--- a/xfdashboard/live-workspace-window.c
+++ /dev/null
@@ -1,935 +0,0 @@
-/*
- * live-workspace-window: An actor used at workspace actor showing
- * a window and its content or its window icon
- *
- * Copyright 2012-2015 Stephan Haller <nomad at froevel.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- *
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "live-workspace-window.h"
-
-#include <glib/gi18n-lib.h>
-#include <gdk/gdk.h>
-
-#include "enums.h"
-#include "window-content.h"
-#include "image-content.h"
-
-/* Define this class in GObject system */
-G_DEFINE_TYPE(XfdashboardLiveWorkspaceWindow,
- xfdashboard_live_workspace_window,
- XFDASHBOARD_TYPE_BACKGROUND)
-
-/* Private structure - access only by public API if needed */
-#define XFDASHBOARD_LIVE_WORKSPACE_WINDOW_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE((obj), XFDASHBOARD_TYPE_LIVE_WORKSPACE_WINDOW, XfdashboardLiveWorkspaceWindowPrivate))
-
-struct _XfdashboardLiveWorkspaceWindowPrivate
-{
- /* Properties related */
- XfdashboardWindowTrackerWindow *window;
-
- gboolean showWindowContent;
-
- gboolean windowIconFillKeepAspect;
- gboolean windowIconXFill;
- gboolean windowIconYFill;
- gfloat windowIconXAlign;
- gfloat windowIconYAlign;
- gfloat windowIconXScale;
- gfloat windowIconYScale;
- XfdashboardAnchorPoint windowIconAnchorPoint;
-
- /* Instance related */
- ClutterActor *windowIconActor;
-};
-
-/* Properties */
-enum
-{
- PROP_0,
-
- PROP_WINDOW,
-
- PROP_SHOW_WINDOW_CONTENT,
-
- PROP_WINDOW_ICON_FILL_KEEP_ASPECT,
- PROP_WINDOW_ICON_X_FILL,
- PROP_WINDOW_ICON_Y_FILL,
- PROP_WINDOW_ICON_X_ALIGN,
- PROP_WINDOW_ICON_Y_ALIGN,
- PROP_WINDOW_ICON_X_SCALE,
- PROP_WINDOW_ICON_Y_SCALE,
- PROP_WINDOW_ICON_ANCHOR_POINT,
-
- PROP_LAST
-};
-
-static GParamSpec* XfdashboardLiveWorkspaceWindowProperties[PROP_LAST]={ 0, };
-
-/* IMPLEMENTATION: Private variables and methods */
-
-/* IMPLEMENTATION: ClutterActor */
-
-/* Allocate position and size of actor and its children */
-static void _xfdashboard_live_workspace_window_allocate(ClutterActor *self,
- const ClutterActorBox *inBox,
- ClutterAllocationFlags inFlags)
-{
- XfdashboardLiveWorkspaceWindowPrivate *priv=XFDASHBOARD_LIVE_WORKSPACE_WINDOW(self)->priv;
- gfloat availableWidth, availableHeight;
- ClutterContent *content;
- ClutterActorBox childAllocation={ 0, };
-
- /* Chain up to store the allocation of the actor */
- CLUTTER_ACTOR_CLASS(xfdashboard_live_workspace_window_parent_class)->allocate(self, inBox, inFlags);
-
- /* If window icon actor is not available stop here */
- if(!priv->windowIconActor) return;
-
- /* Get allocation size */
- availableWidth=inBox->x2-inBox->x1;
- availableHeight=inBox->y2-inBox->y1;
-
- /* By defalt cover whole allocation area with window icon */
- childAllocation.x1=0;
- childAllocation.y1=0;
- childAllocation.x2=availableWidth;
- childAllocation.y2=availableHeight;
-
- /* Get window icon actor's content */
- content=clutter_actor_get_content(priv->windowIconActor);
-
- /* Determine actor box allocation of window icon actor. We can skip calculation
- * if window icon actor should be expanded in both (x and y) direction.
- */
- if(content &&
- (!priv->windowIconXFill || !priv->windowIconYFill))
- {
- gfloat iconWidth, iconHeight;
-
- /* Get size of window icon */
- clutter_content_get_preferred_size(content, &iconWidth, &iconHeight);
- iconWidth*=priv->windowIconXScale;
- iconHeight*=priv->windowIconYScale;
-
- /* Determine left and right boundary of window icon
- * if window icon should not expand in X axis.
- */
- if(!priv->windowIconXFill)
- {
- gfloat offset;
-
- /* Get boundary in X axis depending on gravity and scaled width */
- offset=(priv->windowIconXAlign*availableWidth);
- switch(priv->windowIconAnchorPoint)
- {
- /* Align to left boundary.
- * This is also the default if gravity is none or undefined.
- */
- default:
- case XFDASHBOARD_ANCHOR_POINT_NONE:
- case XFDASHBOARD_ANCHOR_POINT_WEST:
- case XFDASHBOARD_ANCHOR_POINT_NORTH_WEST:
- case XFDASHBOARD_ANCHOR_POINT_SOUTH_WEST:
- break;
-
- /* Align to center of X axis */
- case XFDASHBOARD_ANCHOR_POINT_CENTER:
- case XFDASHBOARD_ANCHOR_POINT_NORTH:
- case XFDASHBOARD_ANCHOR_POINT_SOUTH:
- offset-=(iconWidth/2.0f);
- break;
-
- /* Align to right boundary */
- case XFDASHBOARD_ANCHOR_POINT_EAST:
- case XFDASHBOARD_ANCHOR_POINT_NORTH_EAST:
- case XFDASHBOARD_ANCHOR_POINT_SOUTH_EAST:
- offset-=iconWidth;
- break;
- }
-
- /* Set boundary in X axis */
- childAllocation.x1=offset;
- childAllocation.x2=childAllocation.x1+iconWidth;
- }
-
- /* Determine left and right boundary of window icon
- * if window icon should not expand in X axis.
- */
- if(!priv->windowIconYFill)
- {
- gfloat offset;
-
- /* Get boundary in Y axis depending on gravity and scaled width */
- offset=(priv->windowIconYAlign*availableHeight);
- switch(priv->windowIconAnchorPoint)
- {
- /* Align to upper boundary.
- * This is also the default if gravity is none or undefined.
- */
- default:
- case XFDASHBOARD_ANCHOR_POINT_NONE:
- case XFDASHBOARD_ANCHOR_POINT_NORTH:
- case XFDASHBOARD_ANCHOR_POINT_NORTH_WEST:
- case XFDASHBOARD_ANCHOR_POINT_NORTH_EAST:
- break;
-
- /* Align to center of Y axis */
- case XFDASHBOARD_ANCHOR_POINT_CENTER:
- case XFDASHBOARD_ANCHOR_POINT_WEST:
- case XFDASHBOARD_ANCHOR_POINT_EAST:
- offset-=(iconHeight/2.0f);
- break;
-
- /* Align to lower boundary */
- case XFDASHBOARD_ANCHOR_POINT_SOUTH:
- case XFDASHBOARD_ANCHOR_POINT_SOUTH_WEST:
- case XFDASHBOARD_ANCHOR_POINT_SOUTH_EAST:
- offset-=iconHeight;
- break;
- }
-
- /* Set boundary in Y axis */
- childAllocation.y1=offset;
- childAllocation.y2=childAllocation.y1+iconHeight;
- }
- }
-
- /* If window icon actor should fill in both (x and y) direction and it should
- * also keep the aspect then re-calculate allocation.
- */
- if(content &&
- priv->windowIconXFill &&
- priv->windowIconYFill &&
- priv->windowIconFillKeepAspect)
- {
- gfloat iconWidth, iconHeight;
- gfloat iconAspectRatio;
- gfloat aspectWidth, aspectHeight;
-
- /* Get size of window icon */
- clutter_content_get_preferred_size(content, &iconWidth, &iconHeight);
-
- /* Calculate aspect ratio and new position and size of window icon actor */
- iconAspectRatio=iconWidth/iconHeight;
- aspectWidth=availableWidth;
- aspectHeight=aspectWidth*iconAspectRatio;
-
- if(aspectHeight>availableHeight)
- {
- iconAspectRatio=iconHeight/iconWidth;
- aspectHeight=availableHeight;
- aspectWidth=aspectHeight*iconAspectRatio;
- }
-
- childAllocation.x1=(availableWidth-aspectWidth)/2.0f;
- childAllocation.x2=childAllocation.x1+aspectWidth;
- childAllocation.y1=(availableHeight-aspectHeight)/2.0f;
- childAllocation.y2=childAllocation.y1+aspectHeight;
- }
-
- /* Clip allocation of window icon actor to this actor's allocation */
- if(childAllocation.x1<0 ||
- childAllocation.x2>availableWidth ||
- childAllocation.y1<0 ||
- childAllocation.y2>availableHeight)
- {
- gfloat clipX, clipY;
-
- clipX=0;
- if(childAllocation.x1<0) clipX=-childAllocation.x1;
-
- clipY=0;
- if(childAllocation.y1<0) clipY=-childAllocation.y1;
-
- clutter_actor_set_clip(priv->windowIconActor,
- clipX,
- clipY,
- availableWidth,
- availableHeight);
- }
- else
- {
- if(clutter_actor_has_clip(priv->windowIconActor))
- {
- clutter_actor_remove_clip(priv->windowIconActor);
- }
- }
-
- /* Set allocation of window icon actor */
- clutter_actor_allocate(priv->windowIconActor, &childAllocation, inFlags);
-}
-
-/* IMPLEMENTATION: GObject */
-
-/* Dispose this object */
-static void _xfdashboard_live_workspace_window_dispose(GObject *inObject)
-{
- /* Release allocated variables */
- XfdashboardLiveWorkspaceWindowPrivate *priv=XFDASHBOARD_LIVE_WORKSPACE_WINDOW(inObject)->priv;
-
- if(priv->windowIconActor)
- {
- clutter_actor_destroy(priv->windowIconActor);
- priv->windowIconActor=NULL;
- }
-
- /* Call parent's class dispose method */
- G_OBJECT_CLASS(xfdashboard_live_workspace_window_parent_class)->dispose(inObject);
-}
-
-/* Set/get properties */
-static void _xfdashboard_live_workspace_window_set_property(GObject *inObject,
- guint inPropID,
- const GValue *inValue,
- GParamSpec *inSpec)
-{
- XfdashboardLiveWorkspaceWindow *self=XFDASHBOARD_LIVE_WORKSPACE_WINDOW(inObject);
-
- switch(inPropID)
- {
- case PROP_WINDOW:
- xfdashboard_live_workspace_window_set_window(self, XFDASHBOARD_WINDOW_TRACKER_WINDOW(g_value_get_object(inValue)));
- break;
-
- case PROP_SHOW_WINDOW_CONTENT:
- xfdashboard_live_workspace_window_set_show_window_content(self, g_value_get_boolean(inValue));
- break;
-
- case PROP_WINDOW_ICON_FILL_KEEP_ASPECT:
- xfdashboard_live_workspace_window_set_window_icon_fill_keep_aspect(self, g_value_get_boolean(inValue));
- break;
-
- case PROP_WINDOW_ICON_X_FILL:
- xfdashboard_live_workspace_window_set_window_icon_x_fill(self, g_value_get_boolean(inValue));
- break;
-
- case PROP_WINDOW_ICON_Y_FILL:
- xfdashboard_live_workspace_window_set_window_icon_y_fill(self, g_value_get_boolean(inValue));
- break;
-
- case PROP_WINDOW_ICON_X_ALIGN:
- xfdashboard_live_workspace_window_set_window_icon_x_align(self, g_value_get_float(inValue));
- break;
-
- case PROP_WINDOW_ICON_Y_ALIGN:
- xfdashboard_live_workspace_window_set_window_icon_y_align(self, g_value_get_float(inValue));
- break;
-
- case PROP_WINDOW_ICON_X_SCALE:
- xfdashboard_live_workspace_window_set_window_icon_x_scale(self, g_value_get_float(inValue));
- break;
-
- case PROP_WINDOW_ICON_Y_SCALE:
- xfdashboard_live_workspace_window_set_window_icon_y_scale(self, g_value_get_float(inValue));
- break;
-
- case PROP_WINDOW_ICON_ANCHOR_POINT:
- xfdashboard_live_workspace_window_set_window_icon_anchor_point(self, g_value_get_enum(inValue));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID(inObject, inPropID, inSpec);
- break;
- }
-}
-
-static void _xfdashboard_live_workspace_window_get_property(GObject *inObject,
- guint inPropID,
- GValue *outValue,
- GParamSpec *inSpec)
-{
- XfdashboardLiveWorkspaceWindow *self=XFDASHBOARD_LIVE_WORKSPACE_WINDOW(inObject);
- XfdashboardLiveWorkspaceWindowPrivate *priv=self->priv;
-
- switch(inPropID)
- {
- case PROP_WINDOW:
- g_value_set_object(outValue, priv->window);
- break;
-
- case PROP_SHOW_WINDOW_CONTENT:
- g_value_set_boolean(outValue, priv->showWindowContent);
- break;
-
- case PROP_WINDOW_ICON_FILL_KEEP_ASPECT:
- g_value_set_boolean(outValue, priv->windowIconFillKeepAspect);
- break;
-
- case PROP_WINDOW_ICON_X_FILL:
- g_value_set_boolean(outValue, priv->windowIconXFill);
- break;
-
- case PROP_WINDOW_ICON_Y_FILL:
- g_value_set_boolean(outValue, priv->windowIconYFill);
- break;
-
- case PROP_WINDOW_ICON_X_ALIGN:
- g_value_set_float(outValue, priv->windowIconXAlign);
- break;
-
- case PROP_WINDOW_ICON_Y_ALIGN:
- g_value_set_float(outValue, priv->windowIconYAlign);
- break;
-
- case PROP_WINDOW_ICON_X_SCALE:
- g_value_set_float(outValue, priv->windowIconXScale);
- break;
-
- case PROP_WINDOW_ICON_Y_SCALE:
- g_value_set_float(outValue, priv->windowIconYScale);
- break;
-
- case PROP_WINDOW_ICON_ANCHOR_POINT:
- g_value_set_enum(outValue, priv->windowIconAnchorPoint);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID(inObject, inPropID, inSpec);
- break;
- }
-}
-
-/* Class initialization
- * Override functions in parent classes and define properties
- * and signals
- */
-static void xfdashboard_live_workspace_window_class_init(XfdashboardLiveWorkspaceWindowClass *klass)
-{
- XfdashboardActorClass *actorClass=XFDASHBOARD_ACTOR_CLASS(klass);
- ClutterActorClass *clutterActorClass=CLUTTER_ACTOR_CLASS(klass);
- GObjectClass *gobjectClass=G_OBJECT_CLASS(klass);
-
- /* Override functions */
- gobjectClass->dispose=_xfdashboard_live_workspace_window_dispose;
- gobjectClass->set_property=_xfdashboard_live_workspace_window_set_property;
- gobjectClass->get_property=_xfdashboard_live_workspace_window_get_property;
-
- clutterActorClass->allocate=_xfdashboard_live_workspace_window_allocate;
-
- /* Set up private structure */
- g_type_class_add_private(klass, sizeof(XfdashboardLiveWorkspaceWindowPrivate));
-
- /* Define properties */
- XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW]=
- g_param_spec_object("window",
- _("Window"),
- _("The window to handle and display"),
- XFDASHBOARD_TYPE_WINDOW_TRACKER_WINDOW,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
- XfdashboardLiveWorkspaceWindowProperties[PROP_SHOW_WINDOW_CONTENT]=
- g_param_spec_boolean("show-window-content",
- _("show-window-content"),
- _("If TRUE the window content should be shown otherwise the window's icon will be shown"),
- TRUE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
- XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_FILL_KEEP_ASPECT]=
- g_param_spec_boolean("window-icon-fill-keep-aspect",
- _("Window icon fill keep aspect"),
- _("Whether the window icon should keep their aspect when filling space. Only applies when filling in X and Y direction."),
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
- XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_X_FILL]=
- g_param_spec_boolean("window-icon-x-fill",
- _("Window icon X fill"),
- _("Whether the window icon should fill up horizontal space"),
- TRUE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
- XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_Y_FILL]=
- g_param_spec_boolean("window-icon-y-fill",
- _("Window icon y fill"),
- _("Whether the window icon should fill up vertical space"),
- TRUE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
- XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_X_ALIGN]=
- g_param_spec_float("window-icon-x-align",
- _("Window icon X align"),
- _("The alignment of the window icon on the X axis within the allocation in normalized coordinate between 0 and 1"),
- 0.0f, 1.0f,
- 0.0f,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
- XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_Y_ALIGN]=
- g_param_spec_float("window-icon-y-align",
- _("Window icon Y align"),
- _("The alignment of the window icon on the Y axis within the allocation in normalized coordinate between 0 and 1"),
- 0.0f, 1.0f,
- 0.0f,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
- XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_X_SCALE]=
- g_param_spec_float("window-icon-x-scale",
- _("Window icon X scale"),
- _("Scale factor of window icon on the X axis"),
- 0.0f, G_MAXFLOAT,
- 1.0f,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
- XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_Y_SCALE]=
- g_param_spec_float("window-icon-y-scale",
- _("Window icon Y scale"),
- _("Scale factor of window icon on the Y axis"),
- 0.0f, G_MAXFLOAT,
- 1.0f,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
- XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_ANCHOR_POINT]=
- g_param_spec_enum("window-icon-anchor-point",
- _("Window icon anchor point"),
- _("The anchor point of window icon"),
- XFDASHBOARD_TYPE_ANCHOR_POINT,
- XFDASHBOARD_ANCHOR_POINT_NONE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
-
- g_object_class_install_properties(gobjectClass, PROP_LAST, XfdashboardLiveWorkspaceWindowProperties);
-
- /* Define stylable properties */
- xfdashboard_actor_install_stylable_property(actorClass, XfdashboardLiveWorkspaceWindowProperties[PROP_SHOW_WINDOW_CONTENT]);
- xfdashboard_actor_install_stylable_property(actorClass, XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_FILL_KEEP_ASPECT]);
- xfdashboard_actor_install_stylable_property(actorClass, XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_X_FILL]);
- xfdashboard_actor_install_stylable_property(actorClass, XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_Y_FILL]);
- xfdashboard_actor_install_stylable_property(actorClass, XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_X_ALIGN]);
- xfdashboard_actor_install_stylable_property(actorClass, XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_Y_ALIGN]);
- xfdashboard_actor_install_stylable_property(actorClass, XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_X_SCALE]);
- xfdashboard_actor_install_stylable_property(actorClass, XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_Y_SCALE]);
- xfdashboard_actor_install_stylable_property(actorClass, XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_ANCHOR_POINT]);
-}
-
-/* Object initialization
- * Create private structure and set up default values
- */
-static void xfdashboard_live_workspace_window_init(XfdashboardLiveWorkspaceWindow *self)
-{
- XfdashboardLiveWorkspaceWindowPrivate *priv;
-
- priv=self->priv=XFDASHBOARD_LIVE_WORKSPACE_WINDOW_GET_PRIVATE(self);
-
- /* Set up default values */
- priv->window=NULL;
- priv->showWindowContent=TRUE;
- priv->windowIconFillKeepAspect=FALSE;
- priv->windowIconXFill=TRUE;
- priv->windowIconYFill=TRUE;
- priv->windowIconXAlign=0.0f;
- priv->windowIconYAlign=0.0f;
- priv->windowIconXScale=1.0f;
- priv->windowIconYScale=1.0f;
- priv->windowIconAnchorPoint=XFDASHBOARD_ANCHOR_POINT_NONE;
-
- /* This actor reacts on events */
- clutter_actor_set_reactive(CLUTTER_ACTOR(self), TRUE);
-
- /* Set up window icon actor */
- priv->windowIconActor=xfdashboard_actor_new();
- clutter_actor_add_child(CLUTTER_ACTOR(self), CLUTTER_ACTOR(priv->windowIconActor));
-}
-
-/* IMPLEMENTATION: Public API */
-
-/* Create new actor */
-ClutterActor* xfdashboard_live_workspace_window_new(void)
-{
- return(CLUTTER_ACTOR(g_object_new(XFDASHBOARD_TYPE_LIVE_WORKSPACE_WINDOW, NULL)));
-}
-
-ClutterActor* xfdashboard_live_workspace_window_new_for_window(XfdashboardWindowTrackerWindow *inWindow)
-{
- g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW(inWindow), NULL);
-
- return(CLUTTER_ACTOR(g_object_new(XFDASHBOARD_TYPE_LIVE_WORKSPACE_WINDOW,
- "window", inWindow,
- NULL)));
-}
-
-/* Get/set window to show */
-XfdashboardWindowTrackerWindow* xfdashboard_live_workspace_window_get_window(XfdashboardLiveWorkspaceWindow *self)
-{
- g_return_val_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self), NULL);
-
- return(self->priv->window);
-}
-
-void xfdashboard_live_workspace_window_set_window(XfdashboardLiveWorkspaceWindow *self, XfdashboardWindowTrackerWindow *inWindow)
-{
- XfdashboardLiveWorkspaceWindowPrivate *priv;
- ClutterContent *content;
-
- g_return_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self));
- g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW(inWindow));
-
- priv=self->priv;
-
- /* Set value if changed */
- if(priv->window!=inWindow)
- {
- /* Set value */
- priv->window=inWindow;
-
- /* Set up window content if window is set and should be shown ... */
- if(priv->window && priv->showWindowContent)
- {
- /* Set window content to show */
- content=xfdashboard_window_content_new_for_window(priv->window);
- clutter_actor_set_content(CLUTTER_ACTOR(self), content);
- g_object_unref(content);
-
- /* Remove image content from window icon actor and hide it*/
- if(priv->windowIconActor)
- {
- clutter_actor_set_content(CLUTTER_ACTOR(priv->windowIconActor), NULL);
- clutter_actor_hide(priv->windowIconActor);
- }
- }
- /* ... otherwise remove window content */
- else
- {
- /* Remove window content */
- clutter_actor_set_content(CLUTTER_ACTOR(self), NULL);
-
- /* Set window icon as image at window icon actor and show it */
- if(priv->windowIconActor)
- {
- content=xfdashboard_image_content_new_for_pixbuf(xfdashboard_window_tracker_window_get_icon(priv->window));
- clutter_actor_set_content(CLUTTER_ACTOR(priv->windowIconActor), content);
- g_object_unref(content);
-
- clutter_actor_show(priv->windowIconActor);
- }
- }
-
- /* Notify about property change */
- g_object_notify_by_pspec(G_OBJECT(self), XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW]);
- }
-}
-
-/* Get/set if the window content should be shown or the window's icon */
-gboolean xfdashboard_live_workspace_window_get_show_window_content(XfdashboardLiveWorkspaceWindow *self)
-{
- g_return_val_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self), TRUE);
-
- return(self->priv->showWindowContent);
-}
-
-void xfdashboard_live_workspace_window_set_show_window_content(XfdashboardLiveWorkspaceWindow *self, gboolean inShowWindowContent)
-{
- XfdashboardLiveWorkspaceWindowPrivate *priv;
- ClutterContent *content;
-
- g_return_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self));
-
- priv=self->priv;
-
- /* Set value if changed */
- if(priv->showWindowContent!=inShowWindowContent)
- {
- /* Set value */
- priv->showWindowContent=inShowWindowContent;
-
- /* Set up window content if window is set and should be shown ... */
- if(priv->window && priv->showWindowContent)
- {
- /* Set window content to show */
- content=xfdashboard_window_content_new_for_window(priv->window);
- clutter_actor_set_content(CLUTTER_ACTOR(self), content);
- g_object_unref(content);
-
- /* Remove image content from window icon actor and hide it*/
- if(priv->windowIconActor)
- {
- clutter_actor_set_content(CLUTTER_ACTOR(priv->windowIconActor), NULL);
- clutter_actor_hide(priv->windowIconActor);
- }
- }
- /* ... otherwise remove window content */
- else
- {
- /* Remove window content */
- clutter_actor_set_content(CLUTTER_ACTOR(self), NULL);
-
- /* Set window icon as image at window icon actor and show it */
- if(priv->windowIconActor)
- {
- content=xfdashboard_image_content_new_for_pixbuf(xfdashboard_window_tracker_window_get_icon(priv->window));
- clutter_actor_set_content(CLUTTER_ACTOR(priv->windowIconActor), content);
- g_object_unref(content);
-
- clutter_actor_show(priv->windowIconActor);
- }
- }
-
- /* Notify about property change */
- g_object_notify_by_pspec(G_OBJECT(self), XfdashboardLiveWorkspaceWindowProperties[PROP_SHOW_WINDOW_CONTENT]);
- }
-}
-
-/* Get/set keep aspect when filling allocation area of window icon */
-gboolean xfdashboard_live_workspace_window_get_window_icon_fill_keep_aspect(XfdashboardLiveWorkspaceWindow *self)
-{
- g_return_val_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self), FALSE);
-
- return(self->priv->windowIconFillKeepAspect);
-}
-
-void xfdashboard_live_workspace_window_set_window_icon_fill_keep_aspect(XfdashboardLiveWorkspaceWindow *self, const gboolean inKeepAspect)
-{
- XfdashboardLiveWorkspaceWindowPrivate *priv;
-
- g_return_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self));
-
- priv=self->priv;
-
- /* Set value if changed */
- if(priv->windowIconFillKeepAspect!=inKeepAspect)
- {
- /* Set value */
- priv->windowIconFillKeepAspect=inKeepAspect;
-
- /* Force a redraw of this actor */
- clutter_actor_queue_relayout(CLUTTER_ACTOR(self));
-
- /* Notify about property change */
- g_object_notify_by_pspec(G_OBJECT(self), XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_FILL_KEEP_ASPECT]);
- }
-}
-
-/* Get/set x fill of window icon */
-gboolean xfdashboard_live_workspace_window_get_window_icon_x_fill(XfdashboardLiveWorkspaceWindow *self)
-{
- g_return_val_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self), FALSE);
-
- return(self->priv->windowIconXFill);
-}
-
-void xfdashboard_live_workspace_window_set_window_icon_x_fill(XfdashboardLiveWorkspaceWindow *self, const gboolean inFill)
-{
- XfdashboardLiveWorkspaceWindowPrivate *priv;
-
- g_return_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self));
-
- priv=self->priv;
-
- /* Set value if changed */
- if(priv->windowIconXFill!=inFill)
- {
- /* Set value */
- priv->windowIconXFill=inFill;
-
- /* Force a redraw of this actor */
- clutter_actor_queue_relayout(CLUTTER_ACTOR(self));
-
- /* Notify about property change */
- g_object_notify_by_pspec(G_OBJECT(self), XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_X_FILL]);
- }
-}
-
-/* Get/set y fill of window icon */
-gboolean xfdashboard_live_workspace_window_get_window_icon_y_fill(XfdashboardLiveWorkspaceWindow *self)
-{
- g_return_val_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self), FALSE);
-
- return(self->priv->windowIconYFill);
-}
-
-void xfdashboard_live_workspace_window_set_window_icon_y_fill(XfdashboardLiveWorkspaceWindow *self, const gboolean inFill)
-{
- XfdashboardLiveWorkspaceWindowPrivate *priv;
-
- g_return_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self));
-
- priv=self->priv;
-
- /* Set value if changed */
- if(priv->windowIconYFill!=inFill)
- {
- /* Set value */
- priv->windowIconYFill=inFill;
-
- /* Force a redraw of this actor */
- clutter_actor_queue_relayout(CLUTTER_ACTOR(self));
-
- /* Notify about property change */
- g_object_notify_by_pspec(G_OBJECT(self), XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_Y_FILL]);
- }
-}
-
-/* Get/set x align of window icon */
-gfloat xfdashboard_live_workspace_window_get_window_icon_x_align(XfdashboardLiveWorkspaceWindow *self)
-{
- g_return_val_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self), 0.0f);
-
- return(self->priv->windowIconXAlign);
-}
-
-void xfdashboard_live_workspace_window_set_window_icon_x_align(XfdashboardLiveWorkspaceWindow *self, const gfloat inAlign)
-{
- XfdashboardLiveWorkspaceWindowPrivate *priv;
-
- g_return_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self));
- g_return_if_fail(inAlign>=0.0f && inAlign<=1.0f);
-
- priv=self->priv;
-
- /* Set value if changed */
- if(priv->windowIconXAlign!=inAlign)
- {
- /* Set value */
- priv->windowIconXAlign=inAlign;
-
- /* Force a redraw of this actor */
- clutter_actor_queue_relayout(CLUTTER_ACTOR(self));
-
- /* Notify about property change */
- g_object_notify_by_pspec(G_OBJECT(self), XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_X_ALIGN]);
- }
-}
-
-/* Get/set y align of window icon */
-gfloat xfdashboard_live_workspace_window_get_window_icon_y_align(XfdashboardLiveWorkspaceWindow *self)
-{
- g_return_val_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self), 0.0f);
-
- return(self->priv->windowIconYAlign);
-}
-
-void xfdashboard_live_workspace_window_set_window_icon_y_align(XfdashboardLiveWorkspaceWindow *self, const gfloat inAlign)
-{
- XfdashboardLiveWorkspaceWindowPrivate *priv;
-
- g_return_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self));
- g_return_if_fail(inAlign>=0.0f && inAlign<=1.0f);
-
- priv=self->priv;
-
- /* Set value if changed */
- if(priv->windowIconYAlign!=inAlign)
- {
- /* Set value */
- priv->windowIconYAlign=inAlign;
-
- /* Force a redraw of this actor */
- clutter_actor_queue_relayout(CLUTTER_ACTOR(self));
-
- /* Notify about property change */
- g_object_notify_by_pspec(G_OBJECT(self), XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_Y_ALIGN]);
- }
-}
-
-/* Get/set x scale of window icon */
-gfloat xfdashboard_live_workspace_window_get_window_icon_x_scale(XfdashboardLiveWorkspaceWindow *self)
-{
- g_return_val_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self), 0.0f);
-
- return(self->priv->windowIconXScale);
-}
-
-void xfdashboard_live_workspace_window_set_window_icon_x_scale(XfdashboardLiveWorkspaceWindow *self, const gfloat inScale)
-{
- XfdashboardLiveWorkspaceWindowPrivate *priv;
-
- g_return_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self));
- g_return_if_fail(inScale>=0.0f);
-
- priv=self->priv;
-
- /* Set value if changed */
- if(priv->windowIconXScale!=inScale)
- {
- /* Set value */
- priv->windowIconXScale=inScale;
-
- /* Force a redraw of this actor */
- clutter_actor_queue_relayout(CLUTTER_ACTOR(self));
-
- /* Notify about property change */
- g_object_notify_by_pspec(G_OBJECT(self), XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_X_SCALE]);
- }
-}
-
-/* Get/set y scale of window icon */
-gfloat xfdashboard_live_workspace_window_get_window_icon_y_scale(XfdashboardLiveWorkspaceWindow *self)
-{
- g_return_val_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self), 0.0f);
-
- return(self->priv->windowIconYScale);
-}
-
-void xfdashboard_live_workspace_window_set_window_icon_y_scale(XfdashboardLiveWorkspaceWindow *self, const gfloat inScale)
-{
- XfdashboardLiveWorkspaceWindowPrivate *priv;
-
- g_return_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self));
- g_return_if_fail(inScale>=0.0f);
-
- priv=self->priv;
-
- /* Set value if changed */
- if(priv->windowIconYScale!=inScale)
- {
- /* Set value */
- priv->windowIconYScale=inScale;
-
- /* Force a redraw of this actor */
- clutter_actor_queue_relayout(CLUTTER_ACTOR(self));
-
- /* Notify about property change */
- g_object_notify_by_pspec(G_OBJECT(self), XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_Y_SCALE]);
- }
-}
-
-/* Get/set gravity (anchor point) of window icon */
-XfdashboardAnchorPoint xfdashboard_live_workspace_window_get_window_icon_anchor_point(XfdashboardLiveWorkspaceWindow *self)
-{
- g_return_val_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self), XFDASHBOARD_ANCHOR_POINT_NONE);
-
- return(self->priv->windowIconAnchorPoint);
-}
-
-void xfdashboard_live_workspace_window_set_window_icon_anchor_point(XfdashboardLiveWorkspaceWindow *self, const XfdashboardAnchorPoint inAnchorPoint)
-{
- XfdashboardLiveWorkspaceWindowPrivate *priv;
-
- g_return_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(self));
- g_return_if_fail(inAnchorPoint>=XFDASHBOARD_ANCHOR_POINT_NONE);
- g_return_if_fail(inAnchorPoint<=XFDASHBOARD_ANCHOR_POINT_CENTER);
-
- priv=self->priv;
-
- /* Set value if changed */
- if(priv->windowIconAnchorPoint!=inAnchorPoint)
- {
- /* Set value */
- priv->windowIconAnchorPoint=inAnchorPoint;
-
- /* Force a redraw of this actor */
- clutter_actor_queue_relayout(CLUTTER_ACTOR(self));
-
- /* Notify about property change */
- g_object_notify_by_pspec(G_OBJECT(self), XfdashboardLiveWorkspaceWindowProperties[PROP_WINDOW_ICON_ANCHOR_POINT]);
- }
-}
diff --git a/xfdashboard/live-workspace-window.h b/xfdashboard/live-workspace-window.h
deleted file mode 100644
index 2a31ae7..0000000
--- a/xfdashboard/live-workspace-window.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * live-workspace-window: An actor used at workspace actor showing
- * a window and its content or its window icon
- *
- *
- * Copyright 2012-2015 Stephan Haller <nomad at froevel.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- *
- *
- */
-
-#ifndef __XFDASHBOARD_LIVE_WORKSPACE_WINDOW__
-#define __XFDASHBOARD_LIVE_WORKSPACE_WINDOW__
-
-#include <clutter/clutter.h>
-
-#include "background.h"
-#include "types.h"
-#include "window-tracker-window.h"
-
-G_BEGIN_DECLS
-
-#define XFDASHBOARD_TYPE_LIVE_WORKSPACE_WINDOW (xfdashboard_live_workspace_window_get_type())
-#define XFDASHBOARD_LIVE_WORKSPACE_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), XFDASHBOARD_TYPE_LIVE_WORKSPACE_WINDOW, XfdashboardLiveWorkspaceWindow))
-#define XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), XFDASHBOARD_TYPE_LIVE_WORKSPACE_WINDOW))
-#define XFDASHBOARD_LIVE_WORKSPACE_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), XFDASHBOARD_TYPE_LIVE_WORKSPACE_WINDOW, XfdashboardLiveWorkspaceWindowClass))
-#define XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), XFDASHBOARD_TYPE_LIVE_WORKSPACE_WINDOW))
-#define XFDASHBOARD_LIVE_WORKSPACE_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), XFDASHBOARD_TYPE_LIVE_WORKSPACE_WINDOW, XfdashboardLiveWorkspaceWindowClass))
-
-typedef struct _XfdashboardLiveWorkspaceWindow XfdashboardLiveWorkspaceWindow;
-typedef struct _XfdashboardLiveWorkspaceWindowClass XfdashboardLiveWorkspaceWindowClass;
-typedef struct _XfdashboardLiveWorkspaceWindowPrivate XfdashboardLiveWorkspaceWindowPrivate;
-
-struct _XfdashboardLiveWorkspaceWindow
-{
- /* Parent instance */
- XfdashboardBackground parent_instance;
-
- /* Private structure */
- XfdashboardLiveWorkspaceWindowPrivate *priv;
-};
-
-struct _XfdashboardLiveWorkspaceWindowClass
-{
- /*< private >*/
- /* Parent class */
- XfdashboardBackgroundClass parent_class;
-
- /*< public >*/
- /* Virtual functions */
-};
-
-/* Public API */
-GType xfdashboard_live_workspace_window_get_type(void) G_GNUC_CONST;
-
-ClutterActor* xfdashboard_live_workspace_window_new(void);
-ClutterActor* xfdashboard_live_workspace_window_new_for_window(XfdashboardWindowTrackerWindow *inWindow);
-
-XfdashboardWindowTrackerWindow* xfdashboard_live_workspace_window_get_window(XfdashboardLiveWorkspaceWindow *self);
-void xfdashboard_live_workspace_window_set_window(XfdashboardLiveWorkspaceWindow *self, XfdashboardWindowTrackerWindow *inWindow);
-
-gboolean xfdashboard_live_workspace_window_get_show_window_content(XfdashboardLiveWorkspaceWindow *self);
-void xfdashboard_live_workspace_window_set_show_window_content(XfdashboardLiveWorkspaceWindow *self, gboolean inShowWindowContent);
-
-gboolean xfdashboard_live_workspace_window_get_window_icon_fill_keep_aspect(XfdashboardLiveWorkspaceWindow *self);
-void xfdashboard_live_workspace_window_set_window_icon_fill_keep_aspect(XfdashboardLiveWorkspaceWindow *self, const gboolean inKeepAspect);
-
-gboolean xfdashboard_live_workspace_window_get_window_icon_x_fill(XfdashboardLiveWorkspaceWindow *self);
-void xfdashboard_live_workspace_window_set_window_icon_x_fill(XfdashboardLiveWorkspaceWindow *self, const gboolean inFill);
-
-gboolean xfdashboard_live_workspace_window_get_window_icon_y_fill(XfdashboardLiveWorkspaceWindow *self);
-void xfdashboard_live_workspace_window_set_window_icon_y_fill(XfdashboardLiveWorkspaceWindow *self, const gboolean inFill);
-
-gfloat xfdashboard_live_workspace_window_get_window_icon_x_align(XfdashboardLiveWorkspaceWindow *self);
-void xfdashboard_live_workspace_window_set_window_icon_x_align(XfdashboardLiveWorkspaceWindow *self, const gfloat inAlign);
-
-gfloat xfdashboard_live_workspace_window_get_window_icon_y_align(XfdashboardLiveWorkspaceWindow *self);
-void xfdashboard_live_workspace_window_set_window_icon_y_align(XfdashboardLiveWorkspaceWindow *self, const gfloat inAlign);
-
-gfloat xfdashboard_live_workspace_window_get_window_icon_x_scale(XfdashboardLiveWorkspaceWindow *self);
-void xfdashboard_live_workspace_window_set_window_icon_x_scale(XfdashboardLiveWorkspaceWindow *self, const gfloat inScale);
-
-gfloat xfdashboard_live_workspace_window_get_window_icon_y_scale(XfdashboardLiveWorkspaceWindow *self);
-void xfdashboard_live_workspace_window_set_window_icon_y_scale(XfdashboardLiveWorkspaceWindow *self, const gfloat inScale);
-
-XfdashboardAnchorPoint xfdashboard_live_workspace_window_get_window_icon_anchor_point(XfdashboardLiveWorkspaceWindow *self);
-void xfdashboard_live_workspace_window_set_window_icon_anchor_point(XfdashboardLiveWorkspaceWindow *self, const XfdashboardAnchorPoint inAnchorPoint);
-
-G_END_DECLS
-
-#endif /* __XFDASHBOARD_LIVE_WORKSPACE_WINDOW__ */
diff --git a/xfdashboard/live-workspace.c b/xfdashboard/live-workspace.c
index 7d4089a..d195a8e 100644
--- a/xfdashboard/live-workspace.c
+++ b/xfdashboard/live-workspace.c
@@ -37,9 +37,9 @@
#include "live-window.h"
#include "window-tracker.h"
#include "click-action.h"
-#include "enums.h"
-#include "live-workspace-window.h"
#include "window-content.h"
+#include "image-content.h"
+#include "enums.h"
/* Define this class in GObject system */
G_DEFINE_TYPE(XfdashboardLiveWorkspace,
@@ -54,6 +54,7 @@ struct _XfdashboardLiveWorkspacePrivate
{
/* Properties related */
XfdashboardWindowTrackerWorkspace *workspace;
+ gboolean showWindowContent;
XfdashboardStageBackgroundImageType backgroundType;
/* Instance related */
@@ -67,6 +68,7 @@ enum
PROP_0,
PROP_WORKSPACE,
+ PROP_SHOW_WINDOW_CONTENT,
PROP_BACKGROUND_IMAGE_TYPE,
PROP_LAST
@@ -85,6 +87,7 @@ enum
static guint XfdashboardLiveWorkspaceSignals[SIGNAL_LAST]={ 0, };
/* IMPLEMENTATION: Private variables and methods */
+#define WINDOW_DATA_KEY "window"
/* Check if window should be shown */
static gboolean _xfdashboard_live_workspace_is_visible_window(XfdashboardLiveWorkspace *self,
@@ -114,9 +117,9 @@ static gboolean _xfdashboard_live_workspace_is_visible_window(XfdashboardLiveWor
static ClutterActor* _xfdashboard_live_workspace_find_by_window(XfdashboardLiveWorkspace *self,
XfdashboardWindowTrackerWindow *inWindow)
{
- ClutterActor *child;
- ClutterActorIter iter;
- XfdashboardWindowTrackerWindow *window;
+ ClutterActor *child;
+ ClutterActorIter iter;
+ gpointer window;
g_return_val_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE(self), NULL);
g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW(inWindow), NULL);
@@ -125,11 +128,11 @@ static ClutterActor* _xfdashboard_live_workspace_find_by_window(XfdashboardLiveW
clutter_actor_iter_init(&iter, CLUTTER_ACTOR(self));
while(clutter_actor_iter_next(&iter, &child))
{
- /* Check if it is really a window actor */
- if(!XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(child)) continue;
+ /* Check if it is really a window actor by retrieving associated window */
+ window=g_object_get_data(G_OBJECT(child), WINDOW_DATA_KEY);
+ if(!window || !XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW(window)) continue;
/* Check if this is the actor showing requested window */
- window=xfdashboard_live_workspace_window_get_window(XFDASHBOARD_LIVE_WORKSPACE_WINDOW(child));
if(window==inWindow) return(child);
}
@@ -143,6 +146,7 @@ static ClutterActor* _xfdashboard_live_workspace_create_and_add_window_actor(Xfd
{
XfdashboardLiveWorkspacePrivate *priv;
ClutterActor *actor;
+ ClutterContent *content;
GList *windows;
ClutterActor *lastWindowActor;
XfdashboardWindowTrackerWindow *window;
@@ -187,7 +191,18 @@ static ClutterActor* _xfdashboard_live_workspace_create_and_add_window_actor(Xfd
else
{
/* Create actor */
- actor=xfdashboard_live_workspace_window_new_for_window(inWindow);
+ actor=clutter_actor_new();
+ g_object_set_data(G_OBJECT(actor), WINDOW_DATA_KEY, inWindow);
+ if(priv->showWindowContent)
+ {
+ content=xfdashboard_window_content_new_for_window(inWindow);
+ }
+ else
+ {
+ content=xfdashboard_image_content_new_for_pixbuf(xfdashboard_window_tracker_window_get_icon(inWindow));
+ }
+ clutter_actor_set_content(actor, content);
+ g_object_unref(content);
/* Add new actor at right stacking position */
clutter_actor_insert_child_above(CLUTTER_ACTOR(self), actor, lastWindowActor);
@@ -441,8 +456,8 @@ static void _xfdashboard_live_workspace_get_preferred_width(ClutterActor *self,
/* Allocate position and size of actor and its children */
static void _xfdashboard_live_workspace_allocate(ClutterActor *self,
- const ClutterActorBox *inBox,
- ClutterAllocationFlags inFlags)
+ const ClutterActorBox *inBox,
+ ClutterAllocationFlags inFlags)
{
XfdashboardLiveWorkspacePrivate *priv=XFDASHBOARD_LIVE_WORKSPACE(self)->priv;
gfloat availableWidth, availableHeight;
@@ -482,11 +497,11 @@ static void _xfdashboard_live_workspace_allocate(ClutterActor *self,
while(clutter_actor_iter_next(&iter, &child))
{
/* Get window actor */
- if(!XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(child)) continue;
+ if(!CLUTTER_IS_ACTOR(child)) continue;
- /* Get window of actor */
- window=xfdashboard_live_workspace_window_get_window(XFDASHBOARD_LIVE_WORKSPACE_WINDOW(child));
- if(!window) continue;
+ /* Get associated window */
+ window=g_object_get_data(G_OBJECT(child), WINDOW_DATA_KEY);
+ if(!window || !XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW(window)) continue;
/* Get real size of child */
xfdashboard_window_tracker_window_get_position_size(window, &x, &y, &w, &h);
@@ -511,6 +526,8 @@ static void _xfdashboard_live_workspace_dispose(GObject *inObject)
XfdashboardLiveWorkspacePrivate *priv=self->priv;
/* Dispose allocated resources */
+ g_object_set_data(inObject, WINDOW_DATA_KEY, NULL);
+
if(priv->backgroundImageLayer)
{
clutter_actor_destroy(priv->backgroundImageLayer);
@@ -548,6 +565,10 @@ static void _xfdashboard_live_workspace_set_property(GObject *inObject,
xfdashboard_live_workspace_set_workspace(self, g_value_get_object(inValue));
break;
+ case PROP_SHOW_WINDOW_CONTENT:
+ xfdashboard_live_workspace_set_show_window_content(self, g_value_get_boolean(inValue));
+ break;
+
case PROP_BACKGROUND_IMAGE_TYPE:
xfdashboard_live_workspace_set_background_image_type(self, g_value_get_enum(inValue));
break;
@@ -571,6 +592,10 @@ static void _xfdashboard_live_workspace_get_property(GObject *inObject,
g_value_set_object(outValue, self->priv->workspace);
break;
+ case PROP_SHOW_WINDOW_CONTENT:
+ g_value_set_boolean(outValue, self->priv->showWindowContent);
+ break;
+
case PROP_BACKGROUND_IMAGE_TYPE:
g_value_set_enum(outValue, self->priv->backgroundType);
break;
@@ -611,6 +636,13 @@ static void xfdashboard_live_workspace_class_init(XfdashboardLiveWorkspaceClass
XFDASHBOARD_TYPE_WINDOW_TRACKER_WORKSPACE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ XfdashboardLiveWorkspaceProperties[PROP_SHOW_WINDOW_CONTENT]=
+ g_param_spec_boolean("show-window-content",
+ _("show-window-content"),
+ _("If TRUE the window content should be shown otherwise the window's icon will be shown"),
+ TRUE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
XfdashboardLiveWorkspaceProperties[PROP_BACKGROUND_IMAGE_TYPE]=
g_param_spec_enum("background-image-type",
_("Background image type"),
@@ -622,6 +654,7 @@ static void xfdashboard_live_workspace_class_init(XfdashboardLiveWorkspaceClass
g_object_class_install_properties(gobjectClass, PROP_LAST, XfdashboardLiveWorkspaceProperties);
/* Define stylable properties */
+ xfdashboard_actor_install_stylable_property(actorClass, XfdashboardLiveWorkspaceProperties[PROP_SHOW_WINDOW_CONTENT]);
xfdashboard_actor_install_stylable_property(actorClass, XfdashboardLiveWorkspaceProperties[PROP_BACKGROUND_IMAGE_TYPE]);
/* Define signals */
@@ -650,6 +683,7 @@ static void xfdashboard_live_workspace_init(XfdashboardLiveWorkspace *self)
/* Set default values */
priv->windowTracker=xfdashboard_window_tracker_get_default();
priv->workspace=NULL;
+ priv->showWindowContent=TRUE;
priv->backgroundType=XFDASHBOARD_STAGE_BACKGROUND_IMAGE_TYPE_NONE;
/* Set up this actor */
@@ -720,6 +754,7 @@ XfdashboardWindowTrackerWorkspace* xfdashboard_live_workspace_get_workspace(Xfda
void xfdashboard_live_workspace_set_workspace(XfdashboardLiveWorkspace *self, XfdashboardWindowTrackerWorkspace *inWorkspace)
{
XfdashboardLiveWorkspacePrivate *priv;
+ ClutterContent *content;
XfdashboardWindowTrackerWindow *window;
ClutterActor *child;
ClutterActorIter iter;
@@ -751,7 +786,11 @@ void xfdashboard_live_workspace_set_workspace(XfdashboardLiveWorkspace *self, Xf
while(clutter_actor_iter_next(&iter, &child))
{
/* Get window actor */
- if(!XFDASHBOARD_IS_LIVE_WORKSPACE_WINDOW(child)) continue;
+ if(!CLUTTER_IS_ACTOR(child)) continue;
+
+ /* Check if it is really a window actor by retrieving associated window */
+ window=g_object_get_data(G_OBJECT(child), WINDOW_DATA_KEY);
+ if(!window || !XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW(window)) continue;
/* Destroy window actor */
clutter_actor_destroy(child);
@@ -768,7 +807,10 @@ void xfdashboard_live_workspace_set_workspace(XfdashboardLiveWorkspace *self, Xf
/* Create window actor if window is visible */
if(!_xfdashboard_live_workspace_is_visible_window(self, window)) continue;
- actor=_xfdashboard_live_workspace_create_and_add_window_actor(self, window);
+ actor=clutter_actor_new();
+ content=xfdashboard_window_content_new_for_window(window);
+ clutter_actor_set_content(actor, content);
+ g_object_unref(content);
/* Insert new actor at bottom */
clutter_actor_insert_child_above(CLUTTER_ACTOR(self), actor, NULL);
@@ -778,6 +820,64 @@ void xfdashboard_live_workspace_set_workspace(XfdashboardLiveWorkspace *self, Xf
g_object_notify_by_pspec(G_OBJECT(self), XfdashboardLiveWorkspaceProperties[PROP_WORKSPACE]);
}
+/* Get/set if the window content should be shown or the window's icon */
+gboolean xfdashboard_live_workspace_get_show_window_content(XfdashboardLiveWorkspace *self)
+{
+ g_return_val_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE(self), TRUE);
+
+ return(self->priv->showWindowContent);
+}
+
+void xfdashboard_live_workspace_set_show_window_content(XfdashboardLiveWorkspace *self, gboolean inShowWindowContent)
+{
+ XfdashboardLiveWorkspacePrivate *priv;
+ ClutterContent *content;
+ XfdashboardWindowTrackerWindow *window;
+ ClutterActor *child;
+ ClutterActorIter iter;
+
+ g_return_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE(self));
+
+ priv=self->priv;
+
+ /* Set value if changed */
+ if(priv->showWindowContent!=inShowWindowContent)
+ {
+ /* Set value */
+ priv->showWindowContent=inShowWindowContent;
+
+ /* Recreate window actors in workspace */
+ clutter_actor_iter_init(&iter, CLUTTER_ACTOR(self));
+ while(clutter_actor_iter_next(&iter, &child))
+ {
+ /* Get window actor */
+ if(!CLUTTER_IS_ACTOR(child)) continue;
+
+ /* Check if it is really a window actor by retrieving associated window */
+ window=g_object_get_data(G_OBJECT(child), WINDOW_DATA_KEY);
+ if(!window || !XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW(window)) continue;
+
+ /* Replace content depending on this new value if neccessary */
+ content=clutter_actor_get_content(child);
+ if(priv->showWindowContent && !XFDASHBOARD_IS_WINDOW_CONTENT(content))
+ {
+ content=xfdashboard_window_content_new_for_window(window);
+ clutter_actor_set_content(child, content);
+ g_object_unref(content);
+ }
+ else if(!priv->showWindowContent && !XFDASHBOARD_IS_IMAGE_CONTENT(content))
+ {
+ content=xfdashboard_image_content_new_for_pixbuf(xfdashboard_window_tracker_window_get_icon(window));
+ clutter_actor_set_content(child, content);
+ g_object_unref(content);
+ }
+ }
+
+ /* Notify about property change */
+ g_object_notify_by_pspec(G_OBJECT(self), XfdashboardLiveWorkspaceProperties[PROP_SHOW_WINDOW_CONTENT]);
+ }
+}
+
/* Get/set background type */
XfdashboardStageBackgroundImageType xfdashboard_live_workspace_get_background_image_type(XfdashboardLiveWorkspace *self)
{
diff --git a/xfdashboard/live-workspace.h b/xfdashboard/live-workspace.h
index 898f23b..bfac478 100644
--- a/xfdashboard/live-workspace.h
+++ b/xfdashboard/live-workspace.h
@@ -72,6 +72,9 @@ ClutterActor* xfdashboard_live_workspace_new_for_workspace(XfdashboardWindowTrac
XfdashboardWindowTrackerWorkspace* xfdashboard_live_workspace_get_workspace(XfdashboardLiveWorkspace *self);
void xfdashboard_live_workspace_set_workspace(XfdashboardLiveWorkspace *self, XfdashboardWindowTrackerWorkspace *inWorkspace);
+gboolean xfdashboard_live_workspace_get_show_window_content(XfdashboardLiveWorkspace *self);
+void xfdashboard_live_workspace_set_show_window_content(XfdashboardLiveWorkspace *self, gboolean inShowWindowContent);
+
XfdashboardStageBackgroundImageType xfdashboard_live_workspace_get_background_image_type(XfdashboardLiveWorkspace *self);
void xfdashboard_live_workspace_set_background_image_type(XfdashboardLiveWorkspace *self, XfdashboardStageBackgroundImageType inType);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list