/* Check if window should be shown */ static gboolean _xfdashboard_live_workspace_is_visible_window(XfdashboardLiveWorkspace *self, XfdashboardWindowTrackerWindow *inWindow) { XfdashboardLiveWorkspacePrivate *priv; g_return_val_if_fail(XFDASHBOARD_IS_LIVE_WORKSPACE(self), FALSE); g_return_val_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW(inWindow), FALSE); priv=self->priv; /* Determine if windows should be shown depending on its state */ if(xfdashboard_window_tracker_window_is_skip_pager(inWindow) || xfdashboard_window_tracker_window_is_skip_tasklist(inWindow) || (priv->workspace && !xfdashboard_window_tracker_window_is_visible_on_workspace(inWindow, priv->workspace)) || xfdashboard_window_tracker_window_is_stage(inWindow)) { return(FALSE); } /* If we get here the window should be shown */ return(TRUE); }
/* A window was created */ static void _xfdashboard_application_tracker_on_window_opened(XfdashboardApplicationTracker *self, XfdashboardWindowTrackerWindow *inWindow, gpointer inUserData) { XfdashboardApplicationTrackerPrivate *priv; GAppInfo *appInfo; XfdashboardApplicationTrackerItem *item; g_return_if_fail(XFDASHBOARD_IS_APPLICATION_TRACKER(self)); g_return_if_fail(XFDASHBOARD_IS_WINDOW_TRACKER_WINDOW(inWindow)); priv=self->priv; appInfo=NULL; /* Check if window is "visible" and we should try to find the application * it belongs to. To be "visible" means here that the window should not be * skipped in any tasklist or pager. But hidden or minimized window are * "visible" when looking up running application is meant. */ if(xfdashboard_window_tracker_window_is_skip_pager(inWindow)) { g_debug("Do not resolve window '%s' as it has skip-pager set.", xfdashboard_window_tracker_window_get_title(inWindow)); return; } if(xfdashboard_window_tracker_window_is_skip_tasklist(inWindow)) { g_debug("Do not resolve window '%s' as it has skip-tasklist set.", xfdashboard_window_tracker_window_get_title(inWindow)); return; } /* Try to find application for window */ appInfo=_xfdashboard_application_tracker_get_desktop_id_from_environment(self, inWindow); if(!appInfo) appInfo=_xfdashboard_application_tracker_get_desktop_id_from_window_names(self, inWindow); /* If we could not resolve window to a desktop application info, then stop here */ if(!appInfo) { g_debug("Could not resolve window '%s' to any desktop ID", xfdashboard_window_tracker_window_get_title(inWindow)); return; } g_debug("Window '%s' belongs to desktop ID '%s'", xfdashboard_window_tracker_window_get_title(inWindow), g_app_info_get_id(appInfo)); /* Create application tracker if no one exists for application and window ... */ item= _xfdashboard_application_tracker_find_item_by_app_info(self, appInfo); if(!item) { /* Create application tracker item */ item=_xfdashboard_application_tracker_item_new(appInfo, inWindow); /* Add new item to list of running applications */ priv->runningApps=g_list_prepend(priv->runningApps, item); /* Emit signal as this application is known to be running now */ g_debug("Emitting signal 'state-changed' to running for desktop ID '%s'", item->desktopID); g_signal_emit(self, XfdashboardApplicationTrackerSignals[SIGNAL_STATE_CHANGED], g_quark_from_string(item->desktopID), item->desktopID, TRUE); } /* ... otherwise add window to existing one */ else { /* Add window to list of window for known running application */ _xfdashboard_application_tracker_item_add_window(item, inWindow); } /* Release allocated resources */ if(appInfo) g_object_unref(appInfo); }