MATH_VIEW_ID_NAME
} math_args;
+static void
+activate_maction(GtkMathViewControlData* control_data, guint action, GtkWidget* widget)
+{
+ GdomeElement* elem;
+
+ g_return_if_fail(control_data != NULL);
+
+ elem = gtk_math_view_get_element_at(control_data->math_view, control_data->x, control_data->y);
+ if (elem != NULL)
+ {
+ GdomeException exc = 0;
+ GdomeElement* action = find_self_or_ancestor(elem, MATHML_NS_URI, "maction");
+ if (action != NULL)
+ {
+ gtk_math_view_freeze(control_data->math_view);
+ action_toggle(action);
+ gtk_math_view_thaw(control_data->math_view);
+ gdome_el_unref(action, &exc);
+ g_assert(exc == 0);
+ }
+ gdome_el_unref(elem, &exc);
+ g_assert(exc == 0);
+ }
+}
+
+static void
+copy_link_address(GtkMathViewControlData* control_data, guint action, GtkWidget* widget)
+{
+}
+
+static void
+zoom_in(GtkMathViewControlData* control_data, guint action, GtkWidget* widget)
+{
+ g_return_if_fail(control_data != NULL);
+ guint old_font_size = gtk_math_view_get_font_size(control_data->math_view);
+ gtk_math_view_set_font_size(control_data->math_view, old_font_size + 1);
+}
+
+static void
+zoom_out(GtkMathViewControlData* control_data, guint action, GtkWidget* widget)
+{
+ g_return_if_fail(control_data != NULL);
+ guint old_font_size = gtk_math_view_get_font_size(control_data->math_view);
+ gtk_math_view_set_font_size(control_data->math_view, old_font_size - 1);
+}
+
+static void
+switch_semantic_selection(GtkMathViewControlData* control_data, guint action, GtkWidget* widget)
+{
+ g_return_if_fail(control_data != NULL);
+ control_data->semantic_selection = !control_data->semantic_selection;
+ if (control_data->semantic_selection)
+ {
+ GdomeElement* elem = find_element_with_id(control_data->root_selected,
+ control_data->id_ns_uri,
+ control_data->id_name);
+ }
+}
+
+/*
+static void
+copy_selected_markup(GtkMathViewControlData* control_data, guint action, GtkWidget* widget)
+{
+ gchar* res = copy_markup(control_data->root_selected);
+ if (res != NULL)
+ {
+ set_clipboard(res);
+ g_free(res);
+ }
+}
+*/
+
+static void
+copy_selected_id(GtkMathViewControlData* control_data, guint action, GtkWidget* widget)
+{
+}
+
+static void
+select_parent(GtkMathViewControlData* control_data, guint action, GtkWidget* widget)
+{
+ g_return_if_fail(control_data != NULL);
+ if (control_data->root_selected != NULL)
+ {
+ GdomeException exc = 0;
+ GdomeNode* parent_node = gdome_el_parentNode(control_data->root_selected, &exc);
+ g_assert(parent_node != NULL);
+ g_assert(exc == 0);
+ GdomeElement* parent = gdome_cast_el(parent_node);
+ gtk_math_view_control_data_set_root_selected(control_data, parent);
+ gdome_n_unref(parent_node, &exc);
+ g_assert(exc == 0);
+ }
+}
+
+static void
+deselect(GtkMathViewControlData* control_data, guint action, GtkWidget* widget)
+{
+ g_return_if_fail(control_data != NULL);
+
+ if (control_data->root_selected != NULL)
+ {
+ gtk_math_view_unselect(control_data->math_view, control_data->root_selected);
+ control_data->root_selected = NULL;
+ }
+}
+
+/* Our menu, an array of GtkItemFactoryEntry structures that defines each menu item */
+static GtkItemFactoryEntry menu_items[] = {
+ { "/Activate <maction>", NULL, activate_maction, 0, "<StockItem>", GTK_STOCK_EXECUTE },
+ { "/Copy Link Address", NULL, copy_link_address, 0, "<StockItem>", GTK_STOCK_COPY },
+ /* { "/Jump To", NULL, NULL, 0, "<StockItem>", GTK_STOCK_JUMP_TO }, */
+ { "/sep1", NULL, NULL, 0, "<Separator>" },
+ /* { "/Semantic Selection", NULL, switch_semantic_selection, 0, "<CheckItem>" }, */
+ /* { "/Copy Selected Markup", NULL, copy_selected_markup, 0, "<Item>" }, */
+ /* { "/Copy Id", NULL, copy_selected_id, 0, "<Item>" }, */
+ /* { "/Show Selected", NULL, NULL, 0, "<Item>" }, */
+ { "/Select Parent", NULL, select_parent, 0, "<Item>" },
+ { "/De-Select", NULL, deselect, 0, "<StockItem>", GTK_STOCK_CLEAR },
+ { "/sep2", NULL, NULL, 0, "<Separator>" },
+ { "/Smaller", NULL, zoom_out, 0, "<StockItem>", GTK_STOCK_ZOOM_OUT },
+ { "/Bigger", NULL, zoom_in, 0, "<StockItem>", GTK_STOCK_ZOOM_IN },
+ /* { "/Properties...", NULL, NULL, 0, "<StockItem>", GTK_STOCK_PROPERTIES }, */
+};
+
+static gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+
+void
+button_pressed_cb(GtkMathView* math_view, GdkEventButton* event, GtkMathViewControlData* control_data)
+{
+ g_return_if_fail(math_view != NULL);
+ g_return_if_fail(event != NULL);
+ g_return_if_fail(control_data != NULL);
+
+ if (event->button == 3)
+ {
+#if 0
+ gtk_menu_popup (GTK_MENU(control_data->popup_menu), NULL, NULL,
+ NULL, event, event->button, event->time);
+#endif
+ control_data->x = (gint) event->x;
+ control_data->y = (gint) event->y;
+ printf("data %d %d\n", control_data->x, control_data->y);
+
+ gtk_item_factory_popup_with_data(control_data->item_factory,
+ NULL, NULL, event->x_root, event->y_root,
+ event->button, gtk_get_current_event_time());
+ }
+}
+
+
static void
get_prop(BonoboPropertyBag* bag,
BonoboArg* arg,
{
GtkMathViewControlData *control_data;
GtkWidget *math_view;
+ GtkItemFactory *item_factory;
+
Bonobo_UIContainer remote_ui_container;
BonoboUIComponent *ui_component;
BonoboPropertyBag *prop_bag;
BonoboObject *persist_file;
BonoboObject *persist_stream;
+ BonoboEventSource *evs;
View* view;
math_view = gtk_math_view_new(NULL,NULL);
gtk_widget_show(math_view);
-
- control_data = gtk_math_view_control_data_new((GtkMathView*)math_view);
+
+ control_data = gtk_math_view_control_data_new(control, (GtkMathView*)math_view);
g_signal_connect (control, "destroy", G_CALLBACK (control_destroy), control_data);
+ /* Same as before but don't bother with the accelerators */
+ control_data->item_factory = gtk_item_factory_new (GTK_TYPE_MENU, "<main>", NULL);
+ gtk_item_factory_create_items (control_data->item_factory, nmenu_items, menu_items, control_data);
+ /* control_data->popup_menu = gtk_item_factory_get_widget (control_data->item_factory, "<main>"); */
+ /* gtk_widget_ref(control_data->popup_menu); */
+
+ evs = bonobo_event_source_new();
+ bonobo_object_add_interface(BONOBO_OBJECT(control), BONOBO_OBJECT(evs));
+
gtk_container_add(GTK_CONTAINER (scrolled_window), GTK_WIDGET (control_data->math_view));
view = view_new(control_data);
bonobo_object_unref(BONOBO_OBJECT(prop_bag));
g_signal_connect(control,"set_frame", G_CALLBACK(set_frame), control_data);
+ g_signal_connect(control_data->math_view, "button_press_event", G_CALLBACK (button_pressed_cb),
+ control_data);
g_signal_connect(control_data->math_view, "click", G_CALLBACK (click_cb),
control_data);
g_signal_connect(control_data->math_view, "select_begin", G_CALLBACK(select_begin_cb),
GtkWidget *scrolled_window;
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window),
- GTK_SHADOW_IN);
+ /* putting SHADOW_NONE screws the plugin window, how's that??? */
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_IN);
+ gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 0);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (scrolled_window),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_widget_show_all (scrolled_window);