All pastes #92249 Raw Edit

Miscellany

public text v1 · immutable
#92249 ·published 2006-07-19 11:49 UTC
rendered paste body
heres the search api for the menu from main-menu-engine.c:

void
main_menu_engine_execute_search (MainMenuEngine * engine,
				 const gchar * search_string)
{
	MainMenuEnginePrivate *priv = MAIN_MENU_ENGINE_GET_PRIVATE (engine);

	const gchar *cmd_template;

	GString *cmd;
	gint pivot;
	gchar **argv;

	GError *error = NULL;


	if (strlen (search_string) < 1)
		return;

	cmd_template = priv->conf->search_command;

	if (!cmd_template || strlen (cmd_template) < 1) {
		g_warning ("could not find search command!\n");

		return;
	}

	pivot = strstr (cmd_template, "SEARCH_STRING") - cmd_template;

	cmd = g_string_new_len (cmd_template, pivot);
	g_string_append (cmd, search_string);
	g_string_append (cmd,
			 &cmd_template [pivot + strlen ("SEARCH_STRING")]);

	argv = g_strsplit (cmd->str, " ", -1);

	g_string_free (cmd, TRUE);

	g_spawn_async (NULL,
		       argv,
		       NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error);

	if (error) {
		g_warning ("error:  [%s]\n", error->message);

		g_error_free (error);
	}

	g_strfreev (argv);

	main_menu_ui_reset_search (priv->ui);
	main_menu_ui_close (priv->ui, FALSE);
}

and the vanilla code from the main-menu-ui:

static GtkWidget *
create_search_widget (MainMenuUI * ui, GtkSizeGroup * label_group)
{
	MainMenuUIPrivate *priv = MAIN_MENU_UI_GET_PRIVATE (ui);

	GtkWidget *hbox;
	GtkWidget *search_label;
	GtkWidget *search_entry;


	hbox = gtk_hbox_new (FALSE, 12);

	search_label = get_section_header_label (_("Search:"));
	gtk_misc_set_alignment (GTK_MISC (search_label), 0.0, 0.5);
	gtk_size_group_add_widget (label_group, search_label);
	gtk_box_pack_start (GTK_BOX (hbox), search_label, FALSE, FALSE, 0);

	search_entry = gtk_entry_new ();
	gtk_box_pack_start (GTK_BOX (hbox), search_entry, TRUE, TRUE, 0);

	g_signal_connect (G_OBJECT (search_entry),
			  "activate",
			  G_CALLBACK (search_entry_activate_cb), ui);

	priv->search_entry = GTK_ENTRY (search_entry);

	return hbox;
}

to witch I inserted this addition (after the priv->search_enty = blah):

                search_button = gtk_button_new_with_label (_("Find Now"));
		image = gtk_image_new_from_icon_name ("system-search",
						      GTK_ICON_SIZE_MENU);
		gtk_button_set_image (GTK_BUTTON (search_button), image);
		gtk_widget_show (search_button);

		g_signal_connect (search_button, "activate",
				  G_CALLBACK (search_button_activate_cb),
				  ui);

		gtk_box_pack_end (GTK_BOX (hbox), search_button, FALSE,
				  FALSE, 0);

and the code from the search bars cb:

static void
search_entry_activate_cb (GtkEntry * entry_widget, gpointer user_data)
{
	MainMenuUIPrivate *priv = MAIN_MENU_UI_GET_PRIVATE (user_data);

	main_menu_engine_execute_search (priv->engine,
					 gtk_entry_get_text (entry_widget));
}

Now... intitially I tried to adapt the legacy api from the old search button by redefining it in the new api... adding a redundant search function and tying the button cb to it... but because the legacy cb used 

static void
emit_search_callback (GtkWidget * widget, gpointer search_bar)
{
	emit_search (search_bar);
}

... for the button, (unedited example... I just redid the cb name and the pointers/widget type)... i get a warning for to few args and a dead button