static void on_button_layout_changed (GtkEditable *entry, WBPlugin *wb) { if (gtk_widget_get_sensitive (GTK_WIDGET(entry))) { const gchar *button_layout = gtk_entry_get_text (GTK_ENTRY(entry)); wb->prefs->button_layout = button_layout_filter (button_layout, wb->prefs->button_layout); if (wb->prefs->sync_wm_theme) { gchar *part; const gchar *layout; const gchar *wm_button_layout = xfconf_channel_get_string(wb->wm_channel, "/general/button_layout", "O|HMC"); /* get opposite part of the layout and concatenate it */ part = opposite_layout_filter (wm_button_layout); if (wm_button_layout[0] == part[0]) layout = g_strconcat (part, wb->prefs->button_layout, NULL); else layout = g_strconcat (wb->prefs->button_layout, part, NULL); xfconf_channel_set_string (wb->wm_channel, "/general/button_layout", layout); g_free (part); } else { replace_buttons (wb->prefs->button_layout, wb); on_wck_state_changed (wb->win->controlwindow, wb); } } }
/* Triggers when umaxedwindow's state changes */ static void on_umaxed_window_state_changed (WnckWindow *window, WnckWindowState changed_mask, WnckWindowState new_state, WckUtils *win) { /* WARNING : only if window is unmaximized to prevent growing loop !!!*/ if (!wnck_window_is_maximized(window) || wnck_window_is_minimized(window) || changed_mask & (WNCK_WINDOW_STATE_ABOVE)) { track_controled_window (win); } else { on_wck_state_changed(win->controlwindow, win->data); } }
static void wckbuttons_theme_selection_changed (GtkTreeSelection *selection, WBPlugin *wb) { GtkTreeModel *model; GtkTreeIter iter; const gchar *theme; GtkWidget *entry; if (gtk_tree_selection_get_selected (selection, &model, &iter)) { gtk_tree_model_get (model, &iter, COL_THEME_NAME, &theme, -1); /* set the theme name */ wb->prefs->theme = g_strdup (theme); entry = GTK_WIDGET(gtk_builder_get_object(wb->prefs->builder, "button_layout")); if (wb->prefs->sync_wm_theme) { xfconf_channel_set_string (wb->wm_channel, "/general/theme", wb->prefs->theme); gchar *button_layout; button_layout = get_rc_button_layout (theme); if (button_layout) { gtk_widget_set_sensitive (entry, FALSE); gtk_entry_set_text (GTK_ENTRY(entry), button_layout); } else { gtk_entry_set_text (GTK_ENTRY(entry), wb->prefs->button_layout); gtk_widget_set_sensitive (entry, TRUE); } g_free (button_layout); } else { load_theme (wb->prefs->theme, wb); replace_buttons (wb->prefs->button_layout, wb); on_wck_state_changed (wb->win->controlwindow, wb); } } }
void on_control_window_changed (WnckWindow *controlwindow, WnckWindow *previous, gpointer data) { WindowckPlugin *wckp = data; /* disconect previous window title signal */ wck_signal_handler_disconnect (G_OBJECT(previous), wckp->cnh); on_wck_state_changed (controlwindow, wckp); if (!controlwindow || ((wnck_window_get_window_type (controlwindow) == WNCK_WINDOW_DESKTOP) && !wckp->prefs->show_on_desktop)) { if (gtk_widget_get_visible(GTK_WIDGET(wckp->hvbox))) gtk_widget_hide_all(GTK_WIDGET(wckp->hvbox)); } else { if (!gtk_widget_get_visible(GTK_WIDGET(wckp->hvbox))) gtk_widget_show_all(GTK_WIDGET(wckp->hvbox)); } if (controlwindow) { if (wnck_window_get_window_type (controlwindow) != WNCK_WINDOW_DESKTOP) { wckp->cnh = g_signal_connect(G_OBJECT(controlwindow), "name-changed", G_CALLBACK(on_name_changed), wckp); if (!gtk_widget_get_visible(GTK_WIDGET(wckp->icon->eventbox))) gtk_widget_show_all (GTK_WIDGET(wckp->icon->eventbox)); } else if (wckp->prefs->show_on_desktop && !wckp->prefs->show_app_icon) { if (gtk_widget_get_visible(GTK_WIDGET(wckp->icon->eventbox))) gtk_widget_hide_all (GTK_WIDGET(wckp->icon->eventbox)); } } if (wckp->prefs->show_app_icon && wckp->prefs->show_window_menu) { wck_signal_handler_disconnect (G_OBJECT(previous), wckp->cih); if (controlwindow) wckp->cih = g_signal_connect(G_OBJECT(controlwindow), "icon-changed", G_CALLBACK(on_icon_changed), wckp); } }
/* track the new controled window according to preferences */ static void track_controled_window (WckUtils *win) { WnckWindow *previous_umax = NULL; WnckWindow *previous_control = NULL; previous_control = win->controlwindow; if (win->only_maximized) { previous_umax = win->umaxwindow; win->umaxwindow = get_upper_maximized(win); win->controlwindow = win->umaxwindow; } else if (win->activewindow && (!win->activeworkspace || wnck_window_is_in_viewport(win->activewindow, win->activeworkspace)) && !wnck_window_is_minimized(win->activewindow) && !wnck_window_is_sticky(win->activewindow)) { win->controlwindow = win->activewindow; } if (!win->umaxwindow || (win->umaxwindow != previous_umax)) { wck_signal_handler_disconnect (G_OBJECT(previous_umax), win->msh); wck_signal_handler_disconnect (G_OBJECT(previous_umax), win->mwh); } if (win->only_maximized) { if (win->umaxwindow && (win->umaxwindow != previous_umax)) { /* track the new upper maximized window state */ win->msh = g_signal_connect(G_OBJECT(win->umaxwindow), "state-changed", G_CALLBACK (on_umaxed_window_state_changed), win); win->mwh = g_signal_connect(G_OBJECT (win->umaxwindow), "workspace-changed", G_CALLBACK (umax_window_workspace_changed), win); } else if (win->controlwindow == previous_control) { /* track previous upper maximized window state on desktop */ win->umaxwindow = previous_umax; if (win->umaxwindow) { win->msh = g_signal_connect(G_OBJECT(win->umaxwindow), "state-changed", G_CALLBACK (track_changed_max_state), win); } } } if (!win->controlwindow) win->controlwindow = get_root_window(win->activescreen); if (win->controlwindow != previous_control) on_control_window_changed(win->controlwindow, previous_control, win->data); else on_wck_state_changed(win->controlwindow, win->data); }