/* * When one of our views is activated, we merge our menus * in with our container's menus. */ static void view_create_menus (view_data_t *view_data) { Bonobo_UIContainer remote_uic; BonoboView *view = view_data->view; BonoboUIComponent *uic; const char *ui_commands = "<commands>\n" " <cmd name=\"ColorWhite\" _label=\"White\" group=\"Color\"/>\n" " <cmd name=\"ColorRed\" _label=\"Red\" group=\"Color\"/>\n" " <cmd name=\"ColorGreen\" _label=\"Green\" group=\"Color\"/>\n" "</commands>\n"; const char *ui_menus = "<menu>\n" " <submenu name=\"Colors\" _label=\"Colors\">\n" " <menuitem name=\"ColorWhite\" type=\"radio\" verb=\"\"/>\n" " <menuitem name=\"ColorRed\" type=\"radio\" verb=\"\"/>\n" " <menuitem name=\"ColorGreen\" type=\"radio\" verb=\"\"/>\n" " </submenu>\n" "</menu>\n"; /* * Grab our BonoboUIComponent object. */ uic = bonobo_view_get_ui_component (view); /* * Get our container's UIContainer server. */ remote_uic = bonobo_view_get_remote_ui_container (view); /* * We have to deal gracefully with containers * which don't have a UIContainer running. */ if (remote_uic == CORBA_OBJECT_NIL) { g_warning ("Can't get remote UIContainer"); return; } /* * Give our BonoboUIHandler object a reference to the * container's UIContainer server. */ bonobo_ui_component_set_container (uic, remote_uic); bonobo_ui_component_set_translate (uic, "/", ui_commands, NULL); bonobo_ui_component_set_translate (uic, "/", ui_menus, NULL); bonobo_ui_component_add_listener (uic, "ColorWhite", color_listener_cb, view_data); bonobo_ui_component_add_listener (uic, "ColorRed", color_listener_cb, view_data); bonobo_ui_component_add_listener (uic, "ColorGreen", color_listener_cb, view_data); bonobo_ui_component_thaw (uic, NULL); }
void e_shell_window_commands_setup (EShellWindow *shell_window) { BonoboUIComponent *uic; EShell *shell; g_return_if_fail (shell_window != NULL); g_return_if_fail (E_IS_SHELL_WINDOW (shell_window)); uic = e_shell_window_peek_bonobo_ui_component (shell_window); shell = e_shell_window_peek_shell (shell_window); bonobo_ui_component_add_verb_list_with_data (uic, file_verbs, shell_window); bonobo_ui_component_add_verb_list_with_data (uic, new_verbs, shell_window); bonobo_ui_component_add_verb_list_with_data (uic, actions_verbs, shell_window); bonobo_ui_component_add_verb_list_with_data (uic, tools_verbs, shell_window); bonobo_ui_component_add_verb_list_with_data (uic, help_verbs, shell_window); bonobo_ui_component_add_listener (uic, "ViewButtonsIconText", (BonoboUIListenerFn)view_buttons_icontext_item_toggled_handler, (gpointer)shell_window); bonobo_ui_component_add_listener (uic, "ViewButtonsIcon", (BonoboUIListenerFn)view_buttons_icon_item_toggled_handler, (gpointer)shell_window); bonobo_ui_component_add_listener (uic, "ViewButtonsText", (BonoboUIListenerFn)view_buttons_text_item_toggled_handler, (gpointer)shell_window); bonobo_ui_component_add_listener (uic, "ViewButtonsToolbar", (BonoboUIListenerFn)view_buttons_toolbar_item_toggled_handler, (gpointer)shell_window); bonobo_ui_component_add_listener (uic, "ViewButtonsHide", (BonoboUIListenerFn)view_buttons_hide_item_toggled_handler, (gpointer)shell_window); bonobo_ui_component_add_listener (uic, "ViewToolbar", (BonoboUIListenerFn)view_toolbar_item_toggled_handler, (gpointer)shell_window); bonobo_ui_component_add_listener (uic, "ViewStatusBar", (BonoboUIListenerFn)view_statusbar_item_toggled_handler, (gpointer)shell_window); bonobo_ui_component_add_listener (uic, "ViewSideBar", (BonoboUIListenerFn)view_sidebar_item_toggled_handler, (gpointer)shell_window); e_pixmaps_update (uic, pixmaps); /* Set up the work online / work offline menu item. */ g_signal_connect_object (shell, "line_status_changed", G_CALLBACK (shell_line_status_changed_cb), shell_window, 0); update_offline_menu_item (shell_window, e_shell_get_line_status (shell)); }
static gboolean workrave_applet_fill(PanelApplet *applet) { GdkPixbuf *pixbuf = NULL; GtkWidget *hbox = NULL; BonoboUIComponent *ui = NULL; PanelAppletOrient orient; // Create menus. panel_applet_setup_menu_from_file(applet, WORKRAVE_UIDATADIR, "GNOME_WorkraveApplet.xml", NULL, workrave_applet_verbs, applet); // Add listeners for menu toggle-items. ui = panel_applet_get_popup_component(applet); bonobo_ui_component_add_listener(ui, "ShowLog", showlog_callback, NULL); bonobo_ui_component_add_listener(ui, "Normal", mode_callback, NULL); bonobo_ui_component_add_listener(ui, "Suspended", mode_callback, NULL); bonobo_ui_component_add_listener(ui, "Quiet", mode_callback, NULL); panel_applet_set_flags(PANEL_APPLET(applet), PANEL_APPLET_EXPAND_MINOR); gtk_container_set_border_width(GTK_CONTAINER(applet), 0); panel_applet_set_background_widget(applet, GTK_WIDGET(applet)); gtk_widget_set_events(GTK_WIDGET(applet), gtk_widget_get_events(GTK_WIDGET(applet)) | GDK_BUTTON_PRESS_MASK); g_signal_connect(G_OBJECT(applet), "button_press_event", G_CALLBACK(button_pressed), g_applet); // Socket. g_applet->socket = gtk_socket_new(); gtk_container_set_border_width(GTK_CONTAINER(g_applet->socket), 0); // Image pixbuf = gdk_pixbuf_new_from_file(WORKRAVE_PKGDATADIR "/images/workrave-icon-medium.png", NULL); g_applet->image = gtk_image_new_from_pixbuf(pixbuf); // Signals. g_signal_connect(g_applet->socket, "plug_removed", G_CALLBACK(plug_removed), NULL); g_signal_connect(g_applet->socket, "plug_added", G_CALLBACK(plug_added), NULL); g_signal_connect(G_OBJECT(applet), "change_orient", G_CALLBACK(change_orient), NULL); // Container. hbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(applet), hbox); gtk_box_pack_end(GTK_BOX(hbox), g_applet->socket, TRUE, TRUE, 0); gtk_box_pack_end(GTK_BOX(hbox), g_applet->image, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox), 0); g_applet->socket_id = gtk_socket_get_id(GTK_SOCKET(g_applet->socket)); g_applet->size = panel_applet_get_size(applet); orient = panel_applet_get_orient(applet); switch (orient) { case PANEL_APPLET_ORIENT_UP: g_applet->orientation = 0; break; case PANEL_APPLET_ORIENT_RIGHT: g_applet->orientation = 1; break; case PANEL_APPLET_ORIENT_DOWN: g_applet->orientation = 2; break; case PANEL_APPLET_ORIENT_LEFT: g_applet->orientation = 3; break; } force_no_focus_padding(GTK_WIDGET(applet)); force_no_focus_padding(GTK_WIDGET(g_applet->socket)); force_no_focus_padding(GTK_WIDGET(g_applet->image)); force_no_focus_padding(GTK_WIDGET(hbox)); g_signal_connect(G_OBJECT(applet), "destroy", G_CALLBACK(workrave_applet_destroy), NULL); g_signal_connect(G_OBJECT(hbox), "realize", G_CALLBACK(workrave_applet_realize), NULL); g_signal_connect(G_OBJECT(hbox), "unrealize", G_CALLBACK(workrave_applet_unrealize), NULL); gtk_widget_show(GTK_WIDGET(g_applet->image)); gtk_widget_show(GTK_WIDGET(g_applet->socket)); gtk_widget_show(GTK_WIDGET(hbox)); gtk_widget_show(GTK_WIDGET(applet)); g_signal_connect(G_OBJECT(applet), "size-allocate", G_CALLBACK(size_allocate), NULL); g_signal_connect(G_OBJECT(applet), "change_background", G_CALLBACK(change_background), NULL); return TRUE; }
static void macmenu_construct(AppletType* applet) { MacMenu *mmb = g_slice_new0(MacMenu); mmb->applet = applet; mmb->screen = wnck_screen_get(gdk_screen_get_number( gtk_widget_get_screen(GTK_WIDGET(applet)) )); mmb->mbars_scks = g_hash_table_new(NULL, NULL); mmb->title_subs = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); mmb->ts_mtime = 0; mmb->basebox = GTK_BOX(gtk_hbox_new(FALSE, 0)); gtk_container_set_border_width(GTK_CONTAINER(mmb->basebox), 0); gtk_container_add(GTK_CONTAINER(applet), GTK_WIDGET(mmb->basebox)); mmb->label = GTK_LABEL(gtk_label_new(MAIN_LABEL_TEXT)); PangoAttrList *pattr = pango_attr_list_new(); PangoAttribute *pa = pango_attr_weight_new(PANGO_WEIGHT_BOLD); pa->start_index = 0; pa->end_index = 1024; pango_attr_list_insert(pattr, pa); gtk_label_set_attributes(mmb->label, pattr); pango_attr_list_unref(pattr); gtk_label_set_ellipsize(mmb->label, PANGO_ELLIPSIZE_END); gtk_label_set_max_width_chars(mmb->label, MAX_LABEL_WIDTH_N_CHARS * 10); gtk_label_set_single_line_mode(mmb->label, TRUE); gtk_box_pack_start(mmb->basebox, GTK_WIDGET(mmb->label), FALSE, FALSE, 0); mmb->label_space = gtk_event_box_new(); gtk_widget_set_size_request(mmb->label_space, 8, 1); gtk_box_pack_start(mmb->basebox, mmb->label_space, FALSE, FALSE, 0); mmb->notebook = GTK_NOTEBOOK(gtk_notebook_new()); gtk_notebook_set_show_tabs(mmb->notebook, FALSE); gtk_notebook_set_show_border(mmb->notebook, FALSE); gtk_box_pack_start(mmb->basebox, GTK_WIDGET(mmb->notebook), TRUE, TRUE, 0); mmb->dummysck = gtk_hbox_new(FALSE, 0); gtk_notebook_append_page(mmb->notebook, mmb->dummysck, NULL); mmb->mainsck = gtk_hbox_new(FALSE, SHORTCUT_SPACING); gtk_notebook_append_page(mmb->notebook, mmb->mainsck, NULL); //initialize_mainsck(mmb); mmb->button = GTK_BUTTON(gtk_button_new()); gtk_button_set_relief(mmb->button, GTK_RELIEF_NONE); gtk_button_set_focus_on_click(GTK_BUTTON(mmb->button), FALSE); gtk_box_pack_start(mmb->basebox, GTK_WIDGET(mmb->button), FALSE, FALSE, 0); g_signal_connect(mmb->screen, "active-window-changed", G_CALLBACK(desktop_active_window_changed), mmb); g_signal_connect(mmb->screen, "window-opened", G_CALLBACK(desktop_window_opened), mmb); #ifdef FOR_XFCE g_signal_connect(applet, "free-data", G_CALLBACK(macmenu_free_data), mmb); g_signal_connect(applet, "size-changed", G_CALLBACK(macmenu_set_size), mmb); // setup panel applet gtk_widget_show_all(GTK_WIDGET(mmb->basebox)); xfce_panel_plugin_add_action_widget (applet, GTK_WIDGET(mmb->button)); xfce_panel_plugin_set_expand(applet, TRUE); macmenu_set_size(applet, xfce_panel_plugin_get_size(applet), mmb); // load config, set popup macmenu_load_from_rc(mmb); GtkWidget* label_toggle = gtk_check_menu_item_new_with_label("Hide Label"); g_signal_connect(label_toggle, "toggled", G_CALLBACK(on_label_toggled), mmb); gtk_widget_show(label_toggle); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(label_toggle), mmb->hide_label); gtk_check_menu_item_toggled(GTK_CHECK_MENU_ITEM(label_toggle)); xfce_panel_plugin_menu_insert_item(mmb->applet, GTK_MENU_ITEM(label_toggle)); #elif FOR_GNOME g_signal_connect(applet, "destroy", G_CALLBACK(macmenu_free_data), mmb); // setup panel applet gtk_widget_show_all(GTK_WIDGET(applet)); g_signal_connect(GTK_WIDGET(mmb->button), "pressed", G_CALLBACK(on_button_pressed), mmb); panel_applet_set_flags (applet, PANEL_APPLET_EXPAND_MAJOR); macmenu_set_size(applet, panel_applet_get_size(applet), mmb); // load config, set popup mmb->gconf = gconf_client_get_default(); macmenu_load_from_gconf(mmb); macmenu_write_gconf(mmb); static const char toggle_menu_xml [] = "<popup name=\"button3\">\n" " <menuitem name=\"hide_label\" " " verb=\"hide_label\" " " _label=\"_Hide Label\"\n" " type=\"toggle\"/>\n" "</popup>\n"; static const BonoboUIVerb toggle_menu_verbs[] = { BONOBO_UI_VERB_END }; panel_applet_setup_menu(mmb->applet, toggle_menu_xml, toggle_menu_verbs, mmb); BonoboUIComponent* popup_component = panel_applet_get_popup_component(mmb->applet); bonobo_ui_component_set_prop(popup_component, "/commands/hide_label", "state", mmb->hide_label ? "1": "0", NULL); bonobo_ui_component_add_listener(panel_applet_get_popup_component(mmb->applet), "hide_label", (BonoboUIListenerFn) on_label_toggled, mmb); on_label_toggled(NULL, NULL, 0, NULL, mmb); #endif // FOR_XFCE/FOR_GNOME add_all(mmb); XSetErrorHandler(handle_x_error); }
int main (int argc, char **argv) { BonoboWindow *win; BonoboUIComponent *componenta; BonoboUIComponent *componentb; BonoboUIComponent *componentc; BonoboUIContainer *container; Bonobo_UIContainer corba_container; CORBA_Environment real_ev, *ev; GnomeProgram *program; char *txt, *fname; int i; char simplea [] = "<menu>\n" " <submenu name=\"File\" _label=\"_Ga'\">\n" " <menuitem name=\"open\" pos=\"bottom\" _label=\"_Open\" verb=\"FileOpen\" pixtype=\"stock\" pixname=\"Open\" _tip=\"Wibble\"/>\n" " <control name=\"MyControl\"/>\n" " <control name=\"MyControl2\"/>\n" " <control name=\"ThisIsEmpty\"/>\n" " <menuitem name=\"close\" noplace=\"1\" verb=\"FileExit\" _label=\"_CloseA\" _tip=\"hi\"" " pixtype=\"stock\" pixname=\"Close\" accel=\"*Control*q\"/>\n" " </submenu>\n" "</menu>"; char keysa [] = "<keybindings>\n" " <accel name=\"*Control*3\" id=\"MyFoo\"/>\n" "</keybindings>\n"; char simpleb [] = "<submenu name=\"File\" _label=\"_File\">\n" " <menuitem name=\"open\" _label=\"_OpenB\" pixtype=\"stock\" pixname=\"Open\" _tip=\"Open you fool\"/>\n" " <separator/>\n" " <menuitem name=\"toggle\" type=\"toggle\" id=\"MyFoo\" _label=\"_ToggleMe\" _tip=\"a\" accel=\"*Control*t\"/>\n" " <placeholder name=\"Nice\" delimit=\"top\"/>\n" " <menuitem name=\"close\" noplace=\"1\" verb=\"FileExit\" _label=\"_CloseB\" _tip=\"hi\"" " pixtype=\"stock\" pixname=\"Close\" accel=\"*Control*q\"/>\n" "</submenu>\n"; char simplec [] = "<submenu name=\"File\" _label=\"_FileC\" _tip=\"what!\">\n" " <placeholder name=\"Nice\" delimit=\"top\" hidden=\"0\">\n" " <menuitem name=\"fooa\" _label=\"_FooA\" type=\"radio\" group=\"foogroup\" _tip=\"Radio1\"/>\n" " <menuitem name=\"foob\" _label=\"_FooB\" type=\"radio\" group=\"foogroup\" _tip=\"kippers\"/>\n" " <menuitem name=\"wibble\" verb=\"ThisForcesAnError\" _label=\"_Baa\"" " pixtype=\"stock\" pixname=\"Open\" sensitive=\"0\" _tip=\"fish\"/>\n" " <separator/>\n" " </placeholder>\n" "</submenu>\n"; char simpled [] = "<menuitem name=\"save\" _label=\"_SaveD\" pixtype=\"stock\" pixname=\"Save\" _tip=\"tip1\"/>\n"; char simplee [] = "<menuitem name=\"fish\" _label=\"_Inplace\" pixtype=\"stock\" pixname=\"Save\" _tip=\"tip2\"/>\n"; char toola [] = "<dockitem name=\"Toolbar\" homogeneous=\"0\" vlook=\"icon\">\n" " <toolitem type=\"toggle\" name=\"foo2\" id=\"MyFoo\" pixtype=\"stock\" pixname=\"Save\"" " _label=\"TogSave\" _tip=\"My tooltip\" priority=\"1\"/>\n" " <separator/>\n" " <toolitem name=\"baa\" pixtype=\"stock\" pixname=\"Open\" _label=\"baa\" _tip=\"My 2nd tooltip\" verb=\"testme\"/>\n" " <control name=\"AControl\" _tip=\"a tip on a control\" hidden=\"0\" vdisplay=\"button\"\n" " pixtype=\"stock\" pixname=\"gtk-italic\" _label=\"EntryControl\" verb=\"OpenEntry\"/>\n" " <control name=\"BControl\" _tip=\"another tip on a control\" hidden=\"0\"\n" " pixtype=\"stock\" pixname=\"gtk-stop\"/>\n" "</dockitem>"; char toolb [] = "<dockitem name=\"Toolbar\" look=\"icon\" relief=\"none\">\n" " <toolitem name=\"foo1\" _label=\"Insensitive\" sensitive=\"0\" hidden=\"0\" priority=\"1\"/>\n" " <toolitem type=\"toggle\" name=\"foo5\" id=\"MyFoo\" pixtype=\"stock\" pixname=\"Close\"" " _label=\"TogSame\" _tip=\"My tooltip\"/>\n" "</dockitem>"; /* char statusa [] = "<item name=\"main\">Kippers</item>\n";*/ char statusb [] = "<status>\n" " <item name=\"main\"/>\n" " <control name=\"Progress\"/>\n" "</status>"; ev = &real_ev; CORBA_exception_init (ev); free (malloc (8)); program = gnome_program_init ("test-ui", VERSION, LIBBONOBOUI_MODULE, argc, argv, NULL); textdomain (GETTEXT_PACKAGE); bonobo_activate (); dump_prefs (); win = BONOBO_WINDOW (bonobo_window_new ("Win", "My Test Application")); container = bonobo_window_get_ui_container (win); bonobo_ui_engine_config_set_path (bonobo_window_get_ui_engine (win), "/test-ui/UIConfig/kvps"); corba_container = BONOBO_OBJREF (container); { GtkWidget *box = gtk_vbox_new (FALSE, 0); GtkWidget *button; GtkWidget *path_entry, *state_entry; button = gtk_button_new_with_label ("Press me to test!"); g_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) cb_do_quit, NULL); gtk_widget_show (GTK_WIDGET (button)); gtk_box_pack_start_defaults (GTK_BOX (box), button); button = gtk_button_new_with_label ("Dump Xml tree"); g_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) cb_do_dump, win); gtk_widget_show (GTK_WIDGET (button)); gtk_box_pack_start_defaults (GTK_BOX (box), button); button = gtk_button_new_with_label ("Popup"); g_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) cb_do_popup, win); gtk_widget_show (GTK_WIDGET (button)); gtk_box_pack_start_defaults (GTK_BOX (box), button); button = gtk_button_new_with_label ("Hide toolbar"); g_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) cb_do_hide_toolbar, win); gtk_widget_show (GTK_WIDGET (button)); gtk_box_pack_start_defaults (GTK_BOX (box), button); path_entry = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (path_entry), "/commands/MyFoo"); gtk_widget_show (GTK_WIDGET (path_entry)); gtk_box_pack_start_defaults (GTK_BOX (box), path_entry); state_entry = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (state_entry), "1"); g_signal_connect (GTK_OBJECT (state_entry), "changed", (GtkSignalFunc) cb_set_state, path_entry); gtk_widget_show (GTK_WIDGET (state_entry)); gtk_box_pack_start_defaults (GTK_BOX (box), state_entry); gtk_widget_show (GTK_WIDGET (box)); bonobo_window_set_contents (win, box); } g_signal_connect (GTK_OBJECT (win), "size_request", G_CALLBACK (slow_size_request), NULL); componenta = bonobo_ui_component_new ("A"); bonobo_object_unref (BONOBO_OBJECT (componenta)); componenta = bonobo_ui_component_new ("A"); componentb = bonobo_ui_component_new ("B"); componentc = bonobo_ui_component_new ("C"); bonobo_ui_component_set_container (componenta, corba_container, NULL); bonobo_ui_component_set_container (componentb, corba_container, NULL); bonobo_ui_component_set_container (componentc, corba_container, NULL); global_component = componenta; fname = bonobo_ui_util_get_ui_fname (NULL, "../doc/std-ui.xml"); if (fname && g_file_test (fname, G_FILE_TEST_EXISTS)) { fprintf (stderr, "\n\n--- Add std-ui.xml ---\n\n\n"); bonobo_ui_util_set_ui (componenta, NULL, "../doc/std-ui.xml", "gdm", NULL); /* bonobo_ui_component_set_prop ( componenta, "/menu/Preferences", "pixname", "/demo/a.xpm", NULL);*/ gtk_widget_show (GTK_WIDGET (win)); bonobo_main (); } else { g_warning ("Can't find ../doc/std-ui.xml"); gtk_widget_show (GTK_WIDGET (win)); } g_free (fname); bonobo_ui_component_freeze (componenta, NULL); fprintf (stderr, "\n\n--- Remove A ---\n\n\n"); bonobo_ui_component_rm (componenta, "/", ev); g_assert (!BONOBO_EX (ev)); /* bonobo_ui_component_set_translate (componentb, "/status", statusa, ev); g_assert (!BONOBO_EX (ev));*/ bonobo_ui_component_set_translate (componenta, "/", simplea, ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_translate (componentb, "/", "<popups> <popup name=\"MyStuff\"/> </popups>", ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_translate (componenta, "/popups/MyStuff", simpleb, ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_translate (componenta, "/", keysa, ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_translate (componentb, "/", toola, ev); g_assert (!BONOBO_EX (ev)); { GtkWidget *widget = gtk_button_new_with_label ("My Label"); BonoboControl *control = bonobo_control_new (widget); BonoboUIComponent *componentp; g_signal_connect (GTK_OBJECT (widget), "button_press_event", G_CALLBACK (do_sane_popup), control); componentp = bonobo_control_get_popup_ui_component (control); #if 1 bonobo_ui_component_set (componentp, "/", "<popups>" "<popup name=\"button3\"/></popups>", ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_translate ( componentp, "/popups/button3", simpleb, ev); g_assert (!BONOBO_EX (ev)); #endif gtk_widget_show (widget); bonobo_ui_component_object_set (componenta, "/menu/File/MyControl", BONOBO_OBJREF (control), ev); bonobo_object_unref (BONOBO_OBJECT (control)); g_assert (!BONOBO_EX (ev)); widget = gtk_menu_item_new_with_mnemonic ("_Foo item"); gtk_widget_show (widget); bonobo_ui_component_widget_set (componenta, "/menu/File/MyControl2", widget, ev); } { GtkWidget *widget = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (widget), "Example text"); gtk_widget_show (widget); bonobo_ui_component_widget_set (componenta, "/Toolbar/AControl", widget, ev); g_assert (!BONOBO_EX (ev)); } { GtkWidget *widget; GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data (tame_xpm); widget = bonobo_ui_toolbar_button_item_new (pixbuf, "Test Control"); gtk_widget_show (widget); bonobo_ui_component_widget_set (componenta, "/Toolbar/BControl", widget, ev); g_assert (!BONOBO_EX (ev)); } bonobo_ui_component_add_listener (componentb, "MyFoo", toggled_cb, ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_translate (componentb, "/", statusb, ev); g_assert (!BONOBO_EX (ev)); /* Duplicate set */ bonobo_ui_component_set_translate (componenta, "/", simplea, ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_add_verb_list_with_data ( componenta, verbs, GUINT_TO_POINTER (15)); bonobo_ui_component_thaw (componenta, ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_status (componenta, "WhatA1", ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_status (componenta, "WhatA1", ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_status (componentb, "WhatB2", ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_status (componenta, "WhatA3", ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_rm (componenta, "/status", ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_status (componentb, "WhatB4", ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_status (componenta, "WhatA5", ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_status (componenta, "WhatA6>", ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_status (componentb, "WhatB7", ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_status (componentb, "", ev); g_assert (!BONOBO_EX (ev)); g_assert (bonobo_ui_component_get_prop ( componentb, "/status/main", "non-existant", ev) == NULL); g_assert (!strcmp (BONOBO_EX_REPOID (ev), ex_Bonobo_UIContainer_NonExistentAttr)); CORBA_exception_free (ev); { const char *good = "<item name=\"main\">WhatA6></item>\n"; txt = bonobo_ui_component_get (componenta, "/status/main", TRUE, NULL); if (!txt || strcmp (txt, good)) { g_warning ("Broken merging code '%s' should be '%s'", txt, good); bonobo_window_dump (win, "on fatal error"); g_assert_not_reached (); } CORBA_free (txt); } bonobo_main (); bonobo_ui_component_freeze (componenta, ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_translate (componentb, "/menu", simpleb, ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_translate (componenta, "/", toolb, ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_prop (componenta, "/menu/File", "label", "_Goo-wan>", ev); g_assert (!BONOBO_EX (ev)); /* A 'transparent' node merge */ txt = bonobo_ui_component_get_prop (componenta, "/Toolbar", "look", ev); g_assert (!BONOBO_EX (ev)); printf ("Before merge look '%s'\n", txt); bonobo_ui_component_set_translate (componenta, "/", "<dockitem name=\"Toolbar\"/>", ev); g_assert (!BONOBO_EX (ev)); g_free (txt); txt = bonobo_ui_component_get_prop (componenta, "/Toolbar", "look", ev); g_assert (!BONOBO_EX (ev)); printf ("After merge look '%s'\n", txt); if (txt == NULL || strcmp (txt, "icon")) g_warning ("Serious transparency regression"); g_free (txt); bonobo_ui_component_set_translate (componenta, "/menu/File/Nice", simplee, ev); g_assert (!BONOBO_EX (ev)); { GtkWidget *widget = gtk_progress_bar_new (); BonoboControl *control = bonobo_control_new (widget); guint id; gtk_widget_show (widget); bonobo_ui_component_object_set (componenta, "/status/Progress", BONOBO_OBJREF (control), NULL); id = gtk_timeout_add (100, (GSourceFunc) update_progress, widget); g_signal_connect (GTK_OBJECT (widget), "destroy", G_CALLBACK (disconnect_progress), GUINT_TO_POINTER (id)); bonobo_object_unref (BONOBO_OBJECT (control)); } bonobo_ui_component_set_status (componenta, "This is a very long status message " "that should cause the window to be resized if " "there is in fact a bug in it", ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_thaw (componenta, ev); g_assert (!BONOBO_EX (ev)); bonobo_main (); g_warning ("Begginning stress test, this may take some time ..."); for (i = 0; i < 100; i++) { bonobo_ui_component_freeze (componentc, ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_translate (componentc, "/commands", "<cmd name=\"MyFoo\" sensitive=\"0\"/>", ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_translate (componentc, "/menu", simplec, ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_translate (componentc, "/menu/File", simpled, ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_thaw (componentc, ev); g_assert (!BONOBO_EX (ev)); } g_warning ("Done stress test"); bonobo_main (); bonobo_ui_component_freeze (componenta, ev); g_assert (!BONOBO_EX (ev)); fprintf (stderr, "\n\n--- Remove 2 ---\n\n\n"); bonobo_ui_component_rm (componentb, "/", ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_set_prop (componentc, "/menu/File/save", "label", "SaveC", ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_thaw (componenta, ev); g_assert (!BONOBO_EX (ev)); bonobo_main (); bonobo_ui_component_freeze (componenta, ev); g_assert (!BONOBO_EX (ev)); fprintf (stderr, "\n\n--- Remove 3 ---\n\n\n"); bonobo_ui_component_rm (componentc, "/", ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_thaw (componenta, ev); g_assert (!BONOBO_EX (ev)); bonobo_main (); bonobo_ui_component_freeze (componenta, ev); g_assert (!BONOBO_EX (ev)); fprintf (stderr, "\n\n--- Remove 1 ---\n\n\n"); bonobo_ui_component_rm (componenta, "/", ev); g_assert (!BONOBO_EX (ev)); bonobo_ui_component_thaw (componenta, ev); g_assert (!BONOBO_EX (ev)); bonobo_main (); bonobo_object_unref (BONOBO_OBJECT (componenta)); bonobo_object_unref (BONOBO_OBJECT (componentb)); bonobo_object_unref (BONOBO_OBJECT (componentc)); gtk_widget_destroy (GTK_WIDGET (win)); CORBA_exception_free (ev); g_object_unref (program); return bonobo_ui_debug_shutdown (); }