static void show_config(PurplePluginAction *action) { if (!window) { FrameCreateCb create_frame = action->user_data; GtkWidget *vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER); GtkWidget *hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); GtkWidget *config_frame = create_frame(NULL); GtkWidget *close = gtk_button_new_from_stock(GTK_STOCK_CLOSE); gtk_container_add(GTK_CONTAINER(vbox), config_frame); gtk_container_add(GTK_CONTAINER(vbox), hbox); window = pidgin_create_window(action->label, PIDGIN_HIG_BORDER, NULL, FALSE); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(config_destroy), NULL); g_signal_connect(G_OBJECT(close), "clicked", G_CALLBACK(config_close), NULL); gtk_box_pack_end(GTK_BOX(hbox), close, FALSE, FALSE, PIDGIN_HIG_BORDER); gtk_container_add(GTK_CONTAINER(window), vbox); gtk_widget_show(GTK_WIDGET(close)); gtk_widget_show(GTK_WIDGET(vbox)); gtk_widget_show(GTK_WIDGET(hbox)); } gtk_window_present(GTK_WINDOW(window)); }
static void buddy_ticker_create_window(void) { if(tickerwindow) { gtk_widget_show(tickerwindow); return; } tickerwindow = pidgin_create_window(_("Buddy Ticker"), 0, "ticker", TRUE); gtk_window_set_default_size(GTK_WINDOW(tickerwindow), 500, -1); g_signal_connect(G_OBJECT(tickerwindow), "delete_event", G_CALLBACK (buddy_ticker_destroy_window), NULL); ticker = gtk_ticker_new(); gtk_ticker_set_spacing(GTK_TICKER(ticker), 20); gtk_container_add(GTK_CONTAINER(tickerwindow), ticker); gtk_ticker_set_interval(GTK_TICKER(ticker), 500); gtk_ticker_set_scootch(GTK_TICKER(ticker), 10); gtk_ticker_start_scroll(GTK_TICKER(ticker)); gtk_widget_set_size_request(ticker, 1, -1); gtk_widget_show_all(tickerwindow); }
static void create_console(PurplePluginAction *action) { GtkWidget *vbox = gtk_vbox_new(FALSE, 6); GtkWidget *label; GtkTextBuffer *buffer; GtkWidget *toolbar; GList *connections; GtkToolItem *button; if (console) { gtk_window_present(GTK_WINDOW(console->window)); return; } console = g_new0(XmppConsole, 1); console->window = pidgin_create_window(_("XMPP Console"), PIDGIN_HIG_BORDER, NULL, TRUE); g_signal_connect(G_OBJECT(console->window), "destroy", G_CALLBACK(console_destroy), NULL); gtk_window_set_default_size(GTK_WINDOW(console->window), 580, 400); gtk_container_add(GTK_CONTAINER(console->window), vbox); console->hbox = gtk_hbox_new(FALSE, 3); gtk_box_pack_start(GTK_BOX(vbox), console->hbox, FALSE, FALSE, 0); label = gtk_label_new(_("Account: ")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_box_pack_start(GTK_BOX(console->hbox), label, FALSE, FALSE, 0); console->dropdown = gtk_combo_box_new_text(); for (connections = purple_connections_get_all(); connections; connections = connections->next) { PurpleConnection *gc = connections->data; if (!strcmp(purple_account_get_protocol_id(purple_connection_get_account(gc)), "prpl-jabber")) { console->count++; console->accounts = g_list_append(console->accounts, gc); gtk_combo_box_append_text(GTK_COMBO_BOX(console->dropdown), purple_account_get_username(purple_connection_get_account(gc))); if (!console->gc) console->gc = gc; } } gtk_combo_box_set_active(GTK_COMBO_BOX(console->dropdown),0); gtk_box_pack_start(GTK_BOX(console->hbox), console->dropdown, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(console->dropdown), "changed", G_CALLBACK(dropdown_changed_cb), NULL); console->imhtml = gtk_imhtml_new(NULL, NULL); if (console->count == 0) gtk_imhtml_append_text(GTK_IMHTML(console->imhtml), _("<font color='#c8c8c8'>Not connected to XMPP</font>"), 0); gtk_box_pack_start(GTK_BOX(vbox), pidgin_make_scrollable(console->imhtml, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC, GTK_SHADOW_ETCHED_IN, -1, -1), TRUE, TRUE, 0); toolbar = gtk_toolbar_new(); button = gtk_tool_button_new(NULL, "<iq/>"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(iq_clicked_cb), NULL); gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(button)); button = gtk_tool_button_new(NULL, "<presence/>"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(presence_clicked_cb), NULL); gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(button)); button = gtk_tool_button_new(NULL, "<message/>"); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(message_clicked_cb), NULL); gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(button)); gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); console->entry = gtk_imhtml_new(NULL, NULL); gtk_imhtml_set_whole_buffer_formatting_only(GTK_IMHTML(console->entry), TRUE); g_signal_connect(G_OBJECT(console->entry),"message_send", G_CALLBACK(message_send_cb), console); console->sw = pidgin_make_scrollable(console->entry, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC, GTK_SHADOW_ETCHED_IN, -1, -1); gtk_box_pack_start(GTK_BOX(vbox), console->sw, FALSE, FALSE, 0); gtk_imhtml_set_editable(GTK_IMHTML(console->entry), TRUE); buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(console->entry)); g_signal_connect(G_OBJECT(buffer), "changed", G_CALLBACK(entry_changed_cb), NULL); entry_changed_cb(buffer, NULL); gtk_widget_show_all(console->window); if (console->count < 2) gtk_widget_hide(console->hbox); }
static void pidgin_whiteboard_create(PurpleWhiteboard *wb) { PurpleBuddy *buddy; GtkWidget *window; GtkWidget *drawing_area; GtkWidget *vbox_controls; GtkWidget *hbox_canvas_and_controls; /* -------------------------- |[][][][palette[][][][][]| |------------------------| | canvas | con | | | trol| | | s | | | | | | | -------------------------- */ GtkWidget *clear_button; GtkWidget *save_button; GtkWidget *color_button; PidginWhiteboard *gtkwb = g_new0(PidginWhiteboard, 1); gtkwb->wb = wb; wb->ui_data = gtkwb; /* Get dimensions (default?) for the whiteboard canvas */ if (!purple_whiteboard_get_dimensions(wb, >kwb->width, >kwb->height)) { /* Give some initial board-size */ gtkwb->width = 300; gtkwb->height = 250; } if (!purple_whiteboard_get_brush(wb, >kwb->brush_size, >kwb->brush_color)) { /* Give some initial brush-info */ gtkwb->brush_size = 2; gtkwb->brush_color = 0xff0000; } /* Try and set window title as the name of the buddy, else just use their * username */ buddy = purple_find_buddy(wb->account, wb->who); window = pidgin_create_window(buddy != NULL ? purple_buddy_get_contact_alias(buddy) : wb->who, 0, NULL, FALSE); gtkwb->window = window; gtk_widget_set_name(window, wb->who); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(whiteboard_close_cb), gtkwb); #if 0 int i; GtkWidget *hbox_palette; GtkWidget *vbox_palette_above_canvas_and_controls; GtkWidget *palette_color_box[PALETTE_NUM_COLORS]; /* Create vertical box to place palette above the canvas and controls */ vbox_palette_above_canvas_and_controls = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox_palette_above_canvas_and_controls); gtk_widget_show(vbox_palette_above_canvas_and_controls); /* Create horizontal box for the palette and all its entries */ hbox_palette = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_palette_above_canvas_and_controls), hbox_palette, FALSE, FALSE, PIDGIN_HIG_BORDER); gtk_widget_show(hbox_palette); /* Create horizontal box to seperate the canvas from the controls */ hbox_canvas_and_controls = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_palette_above_canvas_and_controls), hbox_canvas_and_controls, FALSE, FALSE, PIDGIN_HIG_BORDER); gtk_widget_show(hbox_canvas_and_controls); for(i = 0; i < PALETTE_NUM_COLORS; i++) { palette_color_box[i] = gtk_image_new_from_pixbuf(NULL); gtk_widget_set_size_request(palette_color_box[i], gtkwb->width / PALETTE_NUM_COLORS ,32); gtk_container_add(GTK_CONTAINER(hbox_palette), palette_color_box[i]); gtk_widget_show(palette_color_box[i]); } #endif hbox_canvas_and_controls = gtk_hbox_new(FALSE, 0); gtk_widget_show(hbox_canvas_and_controls); gtk_container_add(GTK_CONTAINER(window), hbox_canvas_and_controls); gtk_container_set_border_width(GTK_CONTAINER(window), PIDGIN_HIG_BORDER); /* Create the drawing area */ drawing_area = gtk_drawing_area_new(); gtkwb->drawing_area = drawing_area; gtk_widget_set_size_request(GTK_WIDGET(drawing_area), gtkwb->width, gtkwb->height); gtk_box_pack_start(GTK_BOX(hbox_canvas_and_controls), drawing_area, TRUE, TRUE, PIDGIN_HIG_BOX_SPACE); gtk_widget_show(drawing_area); /* Signals used to handle backing pixmap */ g_signal_connect(G_OBJECT(drawing_area), "expose_event", G_CALLBACK(pidgin_whiteboard_expose_event), gtkwb); g_signal_connect(G_OBJECT(drawing_area), "configure_event", G_CALLBACK(pidgin_whiteboard_configure_event), gtkwb); /* Event signals */ g_signal_connect(G_OBJECT(drawing_area), "button_press_event", G_CALLBACK(pidgin_whiteboard_brush_down), gtkwb); g_signal_connect(G_OBJECT(drawing_area), "motion_notify_event", G_CALLBACK(pidgin_whiteboard_brush_motion), gtkwb); g_signal_connect(G_OBJECT(drawing_area), "button_release_event", G_CALLBACK(pidgin_whiteboard_brush_up), gtkwb); gtk_widget_set_events(drawing_area, GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_HINT_MASK); /* Create vertical box to contain the controls */ vbox_controls = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox_canvas_and_controls), vbox_controls, FALSE, FALSE, PIDGIN_HIG_BOX_SPACE); gtk_widget_show(vbox_controls); /* Add a clear button */ clear_button = gtk_button_new_from_stock(GTK_STOCK_CLEAR); gtk_box_pack_start(GTK_BOX(vbox_controls), clear_button, FALSE, FALSE, PIDGIN_HIG_BOX_SPACE); gtk_widget_show(clear_button); g_signal_connect(G_OBJECT(clear_button), "clicked", G_CALLBACK(pidgin_whiteboard_button_clear_press), gtkwb); /* Add a save button */ save_button = gtk_button_new_from_stock(GTK_STOCK_SAVE); gtk_box_pack_start(GTK_BOX(vbox_controls), save_button, FALSE, FALSE, PIDGIN_HIG_BOX_SPACE); gtk_widget_show(save_button); g_signal_connect(G_OBJECT(save_button), "clicked", G_CALLBACK(pidgin_whiteboard_button_save_press), gtkwb); /* Add a color selector */ color_button = gtk_button_new_from_stock(GTK_STOCK_SELECT_COLOR); gtk_box_pack_start(GTK_BOX(vbox_controls), color_button, FALSE, FALSE, PIDGIN_HIG_BOX_SPACE); gtk_widget_show(color_button); g_signal_connect(G_OBJECT(color_button), "clicked", G_CALLBACK(color_select_dialog), gtkwb); /* Make all this (window) visible */ gtk_widget_show(window); pidgin_whiteboard_set_canvas_as_icon(gtkwb); /* TODO Specific protocol/whiteboard assignment here? Needs a UI Op? */ /* Set default brush size and color */ /* ds->brush_size = DOODLE_BRUSH_MEDIUM; ds->brush_color = 0; */ }
void gevo_add_buddy_dialog_show(PurpleAccount *account, const char *username, const char *group, const char *alias) { GevoAddBuddyDialog *dialog; GtkWidget *button; GtkWidget *sw; GtkWidget *label; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *bbox; GtkWidget *sep; GtkTreeSelection *selection; GtkCellRenderer *cell; dialog = g_new0(GevoAddBuddyDialog, 1); dialog->account = (account != NULL ? account : purple_connection_get_account(purple_connections_get_all()->data)); if (username != NULL) dialog->username = g_strdup(username); dialog->win = pidgin_create_window(_("Add Buddy"), PIDGIN_HIG_BORDER, "add_buddy", TRUE); gtk_widget_set_size_request(dialog->win, -1, 400); g_signal_connect(G_OBJECT(dialog->win), "delete_event", G_CALLBACK(delete_win_cb), dialog); /* Setup the vbox */ vbox = gtk_vbox_new(FALSE, 12); gtk_container_add(GTK_CONTAINER(dialog->win), vbox); gtk_widget_show(vbox); /* Add the label. */ label = gtk_label_new(_("Select a person from your address book below, " "or add a new person.")); gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); gtk_misc_set_alignment(GTK_MISC(label), 0, 0); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0); gtk_widget_show(label); /* Add the search hbox */ hbox = gtk_hbox_new(FALSE, 6); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); gtk_widget_show(hbox); /* "Search" */ label = gtk_label_new(_("Search")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_widget_show(label); /* Addressbooks */ dialog->addrbooks = gevo_addrbooks_model_new(); dialog->addrbooks_combo = gtk_combo_box_new_with_model( dialog->addrbooks); cell = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(dialog->addrbooks_combo), cell, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(dialog->addrbooks_combo), cell, "text", ADDRBOOK_COLUMN_NAME, NULL); gtk_box_pack_start(GTK_BOX(hbox), dialog->addrbooks_combo, FALSE, FALSE, 0); gtk_widget_show(dialog->addrbooks_combo); /* Search field */ dialog->search_field = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), dialog->search_field, TRUE, TRUE, 0); gtk_widget_show(dialog->search_field); g_signal_connect(G_OBJECT(dialog->search_field), "changed", G_CALLBACK(search_changed_cb), dialog); /* Clear button */ button = gtk_button_new_from_stock(GTK_STOCK_CLEAR); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); gtk_widget_show(button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(clear_cb), dialog); /* Scrolled Window */ sw = gtk_scrolled_window_new(0, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN); gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); gtk_widget_show(sw); /* Create the list model for the treeview. */ dialog->model = gtk_list_store_new(NUM_COLUMNS, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_POINTER); /* Now for the treeview */ dialog->treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(dialog->model)); gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(dialog->treeview), TRUE); gtk_container_add(GTK_CONTAINER(sw), dialog->treeview); gtk_widget_show(dialog->treeview); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview)); gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(selected_cb), dialog); add_columns(dialog); /* * Catch addressbook selection and populate treeview with the first * addressbook */ gevo_addrbooks_model_populate(dialog->addrbooks); g_signal_connect(G_OBJECT(dialog->addrbooks_combo), "changed", G_CALLBACK(addrbook_change_cb), dialog); gtk_combo_box_set_active(GTK_COMBO_BOX(dialog->addrbooks_combo), 0); /* Group box */ dialog->group_combo = pidgin_text_combo_box_entry_new(group, gevo_get_groups()); pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("Group:"), NULL, dialog->group_combo, TRUE, NULL); gtk_widget_show_all(dialog->group_combo); /* Cool. Now we only have a little left... */ /* Separator. */ sep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0); gtk_widget_show(sep); /* Button box */ bbox = gtk_hbutton_box_new(); gtk_box_set_spacing(GTK_BOX(bbox), 6); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, TRUE, 0); gtk_widget_show(bbox); /* "New Person" button */ button = pidgin_pixbuf_button_from_stock(_("New Person"), GTK_STOCK_NEW, PIDGIN_BUTTON_HORIZONTAL); gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); gtk_widget_show(button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(new_person_cb), dialog); /* "Cancel" button */ button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); gtk_widget_show(button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(cancel_cb), dialog); /* "Select Buddy" button */ button = pidgin_pixbuf_button_from_stock(_("Select Buddy"), GTK_STOCK_APPLY, PIDGIN_BUTTON_HORIZONTAL); dialog->select_button = button; gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); gtk_widget_set_sensitive(button, FALSE); gtk_widget_show(button); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(select_buddy_cb), dialog); /* Show it. */ gtk_widget_show(dialog->win); }