static void budgie_wm_start(MetaPlugin *plugin) { BudgieWM *self = BUDGIE_WM(plugin); MetaScreen *screen = meta_plugin_get_screen(plugin); ClutterActor* actors[2]; /* Init background */ self->priv->background_group = meta_background_group_new(); clutter_actor_set_reactive(self->priv->background_group, TRUE); clutter_actor_insert_child_below(meta_get_window_group_for_screen(screen), self->priv->background_group, NULL); g_signal_connect(screen, "monitors-changed", G_CALLBACK(on_monitors_changed), plugin); on_monitors_changed(screen, plugin); /* Now we're in action. */ clutter_actor_show(meta_get_window_group_for_screen(screen)); clutter_actor_show(self->priv->background_group); clutter_actor_set_opacity(meta_get_window_group_for_screen(screen), 0); clutter_actor_set_opacity(self->priv->background_group, 0); actors[0] = meta_get_window_group_for_screen(screen); actors[1] = self->priv->background_group; clutter_actor_set_background_color(meta_get_stage_for_screen(screen), clutter_color_get_static(CLUTTER_COLOR_BLACK)); clutter_actor_show(meta_get_stage_for_screen(screen)); for (int i = 0; i < 2; i++) { clutter_actor_save_easing_state(actors[i]); clutter_actor_set_easing_mode(actors[i], CLUTTER_EASE_OUT_QUAD); clutter_actor_set_easing_duration(actors[i], SHOW_TIMEOUT); g_object_set(actors[i], "opacity", 255, NULL); clutter_actor_restore_easing_state(actors[i]); } /* Set up our own keybinding overrides */ meta_keybindings_set_custom_handler(BUDGIE_KEYBINDING_MAIN_MENU, budgie_launch_menu, NULL, NULL); meta_keybindings_set_custom_handler(BUDGIE_KEYBINDING_RUN_DIALOG, budgie_launch_rundialog, NULL, NULL); meta_keybindings_set_custom_handler("switch-windows", (MetaKeyHandlerFunc)switch_windows, self, NULL); meta_keybindings_set_custom_handler("switch-applications", (MetaKeyHandlerFunc)switch_windows, self, NULL); /* Handle keys.. */ budgie_keys_init(meta_screen_get_display(screen)); budgie_menus_init(self); g_signal_connect(meta_screen_get_display(screen), "overlay-key", G_CALLBACK(overlay_cb), NULL); }
static void start (MetaPlugin *plugin) { MetaDefaultPlugin *self = META_DEFAULT_PLUGIN (plugin); MetaScreen *screen = meta_plugin_get_screen (plugin); self->priv->background_group = meta_background_group_new (); clutter_actor_insert_child_below (meta_get_window_group_for_screen (screen), self->priv->background_group, NULL); g_signal_connect (screen, "monitors-changed", G_CALLBACK (on_monitors_changed), plugin); on_monitors_changed (screen, plugin); clutter_actor_show (meta_get_stage_for_screen (screen)); }
static ScreenTilePreview * get_screen_tile_preview (MetaScreen *screen) { ScreenTilePreview *preview = g_object_get_qdata (G_OBJECT (screen), screen_tile_preview_data_quark); if (G_UNLIKELY (screen_tile_preview_data_quark == 0)) screen_tile_preview_data_quark = g_quark_from_static_string (SCREEN_TILE_PREVIEW_DATA_KEY); if (G_UNLIKELY (!preview)) { preview = g_slice_new0 (ScreenTilePreview); preview->actor = clutter_actor_new (); clutter_actor_set_background_color (preview->actor, CLUTTER_COLOR_Blue); clutter_actor_set_opacity (preview->actor, 100); clutter_actor_add_child (meta_get_window_group_for_screen (screen), preview->actor); g_object_set_qdata_full (G_OBJECT (screen), screen_tile_preview_data_quark, preview, free_screen_tile_preview); } return preview; }
/* * This is the Metacity entry point for the effect. */ void mnb_switch_zones_effect (MetaPlugin *plugin, gint from, gint to, MetaMotionDirection direction) { GList *w; gint width, height; MetaScreen *screen; ClutterActor *window_group; if (running++) { /* * We have been called while the effect is already in progress; we need to * mutter know that we completed the previous run. */ if (--running < 0) { g_warning (G_STRLOC ": error in running effect accounting!"); running = 0; } meta_plugin_switch_workspace_completed (plugin); } if ((from == to) && !zones_preview) { if (--running < 0) { g_warning (G_STRLOC ": error in running effect accounting!"); running = 0; } meta_plugin_switch_workspace_completed (plugin); return; } screen = meta_plugin_get_screen (plugin); if (!zones_preview) { ClutterActor *stage; /* Construct the zones preview actor */ zones_preview = mnb_zones_preview_new (); g_object_set (G_OBJECT (zones_preview), "workspace", (gdouble)from, NULL); /* Add it to the stage */ stage = meta_get_stage_for_screen (screen); clutter_container_add_actor (CLUTTER_CONTAINER (stage), zones_preview); /* Attach to completed signal */ g_signal_connect (zones_preview, "switch-completed", G_CALLBACK (mnb_switch_zones_completed_cb), plugin); } meta_screen_get_size (screen, &width, &height); g_object_set (G_OBJECT (zones_preview), "workspace-width", (guint)width, "workspace-height", (guint)height, NULL); mnb_zones_preview_clear (MNB_ZONES_PREVIEW (zones_preview)); mnb_zones_preview_set_n_workspaces (MNB_ZONES_PREVIEW (zones_preview), meta_screen_get_n_workspaces (screen)); /* Add windows to zone preview actor */ for (w = meta_get_window_actors (screen); w; w = w->next) { MetaWindowActor *window_actor = w->data; gint workspace = meta_window_actor_get_workspace (window_actor); MetaWindow *window = meta_window_actor_get_meta_window (window_actor); MetaWindowType type = meta_window_get_window_type (window); /* * Only show regular windows that are not sticky (getting stacking order * right for sticky windows would be really hard, and since they appear * on each workspace, they do not help in identifying which workspace * it is). */ if ((workspace < 0) || meta_window_actor_is_override_redirect (window_actor) || (type != META_WINDOW_NORMAL)) continue; mnb_zones_preview_add_window (MNB_ZONES_PREVIEW (zones_preview), window_actor); } /* Make sure it's on top */ window_group = meta_get_window_group_for_screen (screen); clutter_actor_raise (zones_preview, window_group); /* Initiate animation */ mnb_zones_preview_change_workspace (MNB_ZONES_PREVIEW (zones_preview), to); }