/* Plugin constructor. */ static GtkWidget *wincmd_constructor(LXPanel *panel, config_setting_t *settings) { /* Allocate plugin context and set into Plugin private data pointer. */ WinCmdPlugin * wc = g_new0(WinCmdPlugin, 1); GtkWidget * p; const char *str; int tmp_int; /* Initialize to defaults. */ wc->button_1_command = WC_ICONIFY; wc->button_2_command = WC_SHADE; /* Load parameters from the configuration file. */ if (config_setting_lookup_string(settings, "Button1", &str)) { if (g_ascii_strcasecmp(str, "shade") == 0) wc->button_1_command = WC_SHADE; else if (g_ascii_strcasecmp(str, "none") == 0) wc->button_1_command = WC_NONE; /* default is WC_ICONIFY */ } if (config_setting_lookup_string(settings, "Button2", &str)) { if (g_ascii_strcasecmp(str, "iconify") == 0) wc->button_2_command = WC_ICONIFY; else if (g_ascii_strcasecmp(str, "none") == 0) wc->button_2_command = WC_NONE; } if (config_setting_lookup_string(settings, "image", &str)) wc->image = expand_tilda(str); if (config_setting_lookup_int(settings, "Toggle", &tmp_int)) wc->toggle_preference = tmp_int != 0; /* Default the image if unspecified. */ if (wc->image == NULL) wc->image = g_strdup("window-manager"); /* Save construction pointers */ wc->settings = settings; /* Allocate top level widget and set into Plugin widget pointer. */ p = lxpanel_button_new_for_icon(panel, wc->image, NULL, NULL); lxpanel_plugin_set_data(p, wc, wincmd_destructor); gtk_container_set_border_width(GTK_CONTAINER(p), 0); gtk_widget_set_tooltip_text(p, _("Left click to iconify all windows. Middle click to shade them.")); /* Show the widget and return. */ return p; }
/* Plugin constructor. */ static GtkWidget *dirmenu_constructor(LXPanel *panel, config_setting_t *settings) { /* Allocate and initialize plugin context and set into Plugin private data pointer. */ DirMenuPlugin * dm = g_new0(DirMenuPlugin, 1); GtkWidget * p; const char *str; /* Load parameters from the configuration file. */ if (config_setting_lookup_string(settings, "image", &str)) dm->image = g_strdup(str); if (config_setting_lookup_string(settings, "path", &str)) dm->path = expand_tilda(str); else dm->path = g_strdup(fm_get_home_dir()); if (config_setting_lookup_string(settings, "name", &str)) dm->name = g_strdup(str); /* Save construction pointers */ dm->panel = panel; dm->settings = settings; /* Allocate top level widget and set into Plugin widget pointer. * It is not known why, but the button text will not draw if it is edited from empty to non-empty * unless this strategy of initializing it with a non-empty value first is followed. */ p = lxpanel_button_new_for_icon(panel, ((dm->image != NULL) ? dm->image : "file-manager"), NULL, "Temp"); lxpanel_plugin_set_data(p, dm, dirmenu_destructor); /* Initialize the widget. */ dirmenu_apply_configuration(p); g_signal_connect(G_OBJECT(p), "button-release-event", G_CALLBACK(dirmenu_button_release_event), dm); /* Show the widget and return. */ return p; }