Commit 938801c1 authored by Jiri (George) Lebl's avatar Jiri (George) Lebl Committed by George Lebl

handle crashes of the readline-helper without hanging. Slight


Thu Feb 26 00:54:16 2009  Jiri (George) Lebl <jirka@5z.com>

	* src/gnome-genius.c: handle crashes of the readline-helper without
	  hanging.  Slight reorganization of startup to show window few
	  nanoseconds faster.  Also don't use gtk_show_uri yet.  This
	  causes backwards binary incompatibility which sucks as my other
	  laptop uses hardy.

	* src/calc.c: slight improvement in help handling.  Don't sort
	  the functions in the categories until we really need to.

	* src/dict.c: when checking for similar id's do the sum and a square
	  sum to check for reorderings.  This fixes the strange suggestions
	  sometimes

	* src/genius-readline-helper.c: avoid crashes on getting SIGINT, ignore


svn path=/trunk/; revision=738
parent 23668957
Thu Feb 26 00:54:16 2009 Jiri (George) Lebl <jirka@5z.com>
* src/gnome-genius.c: handle crashes of the readline-helper without
hanging. Slight reorganization of startup to show window few
nanoseconds faster. Also don't use gtk_show_uri yet. This
causes backwards binary incompatibility which sucks as my other
laptop uses hardy.
* src/calc.c: slight improvement in help handling. Don't sort
the functions in the categories until we really need to.
* src/dict.c: when checking for similar id's do the sum and a square
sum to check for reorderings. This fixes the strange suggestions
sometimes
* src/genius-readline-helper.c: avoid crashes on getting SIGINT, ignore
Tue Feb 24 22:05:41 2009 Jiri (George) Lebl <jirka@5z.com> Tue Feb 24 22:05:41 2009 Jiri (George) Lebl <jirka@5z.com>
* gtkextra/gtkplotdata.c, gtkextra/gtkplotgdk.c: Move the line * gtkextra/gtkplotdata.c, gtkextra/gtkplotgdk.c: Move the line
......
...@@ -78,9 +78,10 @@ typedef struct { ...@@ -78,9 +78,10 @@ typedef struct {
char *name; char *name;
gboolean internal; gboolean internal;
GSList *funcs; GSList *funcs;
gboolean funcs_sorted;
} HelpCategory; } HelpCategory;
static GSList *categories = NULL; static GSList *gel_categories = NULL;
static GHashTable *helphash = NULL; static GHashTable *gel_helphash = NULL;
/*these two are used for test parses so that we know when we have a complete /*these two are used for test parses so that we know when we have a complete
expression toevaluate*/ expression toevaluate*/
...@@ -132,7 +133,7 @@ static HelpCategory * ...@@ -132,7 +133,7 @@ static HelpCategory *
get_category (const char *category, gboolean insert) get_category (const char *category, gboolean insert)
{ {
GSList *li; GSList *li;
for (li = categories; li != NULL; li = li->next) { for (li = gel_categories; li != NULL; li = li->next) {
HelpCategory *cat = li->data; HelpCategory *cat = li->data;
if (strcmp (cat->category, category) == 0) if (strcmp (cat->category, category) == 0)
return cat; return cat;
...@@ -141,7 +142,7 @@ get_category (const char *category, gboolean insert) ...@@ -141,7 +142,7 @@ get_category (const char *category, gboolean insert)
if (insert) { if (insert) {
HelpCategory *cat = g_new0 (HelpCategory, 1); HelpCategory *cat = g_new0 (HelpCategory, 1);
cat->category = g_strdup (category); cat->category = g_strdup (category);
categories = g_slist_append (categories, cat); gel_categories = g_slist_append (gel_categories, cat);
return cat; return cat;
} else { } else {
return NULL; return NULL;
...@@ -153,15 +154,15 @@ get_help (const char *func, gboolean insert) ...@@ -153,15 +154,15 @@ get_help (const char *func, gboolean insert)
{ {
GelHelp *help; GelHelp *help;
if (helphash == NULL) if (gel_helphash == NULL)
helphash = g_hash_table_new (g_str_hash, g_str_equal); gel_helphash = g_hash_table_new (g_str_hash, g_str_equal);
help = g_hash_table_lookup (helphash, func); help = g_hash_table_lookup (gel_helphash, func);
if (help == NULL && insert) { if (help == NULL && insert) {
help = g_new0 (GelHelp, 1); help = g_new0 (GelHelp, 1);
help->func = g_strdup (func); help->func = g_strdup (func);
g_hash_table_insert (helphash, help->func, help); g_hash_table_insert (gel_helphash, help->func, help);
} }
return help; return help;
...@@ -172,7 +173,7 @@ GSList * ...@@ -172,7 +173,7 @@ GSList *
get_categories (void) get_categories (void)
{ {
GSList *li, *list = NULL; GSList *li, *list = NULL;
for (li = categories; li != NULL; li = li->next) { for (li = gel_categories; li != NULL; li = li->next) {
HelpCategory *cat = li->data; HelpCategory *cat = li->data;
list = g_slist_prepend (list, g_strdup (cat->category)); list = g_slist_prepend (list, g_strdup (cat->category));
} }
...@@ -240,6 +241,11 @@ get_helps (const char *category) ...@@ -240,6 +241,11 @@ get_helps (const char *category)
return NULL; return NULL;
} else { } else {
GSList *li, *list = NULL; GSList *li, *list = NULL;
if ( ! cat->funcs_sorted) {
cat->funcs = g_slist_sort (cat->funcs,
function_sort);
cat->funcs_sorted = TRUE;
}
for (li = cat->funcs; li != NULL; li = li->next) { for (li = cat->funcs; li != NULL; li = li->next) {
const char *func = li->data; const char *func = li->data;
GelHelp *help = get_help (func, FALSE /* insert */); GelHelp *help = get_help (func, FALSE /* insert */);
...@@ -321,9 +327,9 @@ add_category (const char *func, const char *category) ...@@ -321,9 +327,9 @@ add_category (const char *func, const char *category)
} }
help->category = g_strdup (category); help->category = g_strdup (category);
cat->funcs = g_slist_insert_sorted (cat->funcs, cat->funcs = g_slist_prepend (cat->funcs,
g_strdup (func), g_strdup (func));
function_sort); cat->funcs_sorted = FALSE;
} }
static void static void
...@@ -411,10 +417,10 @@ whack_help (const char *func) ...@@ -411,10 +417,10 @@ whack_help (const char *func)
{ {
GelHelp *help; GelHelp *help;
if (helphash == NULL) if (gel_helphash == NULL)
return; return;
help = g_hash_table_lookup (helphash, func); help = g_hash_table_lookup (gel_helphash, func);
if (help != NULL) { if (help != NULL) {
GSList *li, *list; GSList *li, *list;
...@@ -430,7 +436,7 @@ whack_help (const char *func) ...@@ -430,7 +436,7 @@ whack_help (const char *func)
if (help->category != NULL) if (help->category != NULL)
remove_from_category (func, help->category); remove_from_category (func, help->category);
g_hash_table_remove (helphash, func); g_hash_table_remove (gel_helphash, func);
g_slist_free (help->aliases); g_slist_free (help->aliases);
g_free (help->aliasfor); g_free (help->aliasfor);
...@@ -2404,7 +2410,6 @@ print_command_help (const char *cmd) ...@@ -2404,7 +2410,6 @@ print_command_help (const char *cmd)
static void static void
full_help (void) full_help (void)
{ {
GSList *categories = get_categories ();
GSList *functions; GSList *functions;
GSList *cli, *fli; GSList *cli, *fli;
int i; int i;
...@@ -2429,14 +2434,14 @@ full_help (void) ...@@ -2429,14 +2434,14 @@ full_help (void)
for (i = 0; genius_toplevels[i] != NULL; i++) for (i = 0; genius_toplevels[i] != NULL; i++)
print_command_help (genius_toplevels[i]); print_command_help (genius_toplevels[i]);
for (cli = categories; cli != NULL; cli = cli->next) { for (cli = gel_categories; cli != NULL; cli = cli->next) {
char *cat = cli->data; HelpCategory *cat = cli->data;
functions = get_helps (cat); functions = get_helps (cat->category);
if (functions != NULL) { if (functions != NULL) {
do_black (); do_black ();
gel_output_printf_full (main_out, FALSE, "\n%s:\n", gel_output_printf_full (main_out, FALSE, "\n%s:\n",
get_category_name (cat)); get_category_name (cat->category));
for (fli = functions; fli != NULL; fli = fli->next) { for (fli = functions; fli != NULL; fli = fli->next) {
GelHelp *help = fli->data; GelHelp *help = fli->data;
...@@ -2445,10 +2450,7 @@ full_help (void) ...@@ -2445,10 +2450,7 @@ full_help (void)
g_slist_free (functions); g_slist_free (functions);
} }
g_free (cat);
} }
g_slist_free (categories);
functions = get_helps (NULL); functions = get_helps (NULL);
if (functions != NULL) { if (functions != NULL) {
...@@ -2655,26 +2657,21 @@ dump_cat (FILE *outfile, const char *cat) ...@@ -2655,26 +2657,21 @@ dump_cat (FILE *outfile, const char *cat)
void void
gel_dump_strings_from_help (FILE *outfile) gel_dump_strings_from_help (FILE *outfile)
{ {
GSList *categories = get_categories ();
GSList *cli; GSList *cli;
for (cli = categories; cli != NULL; cli = cli->next) { for (cli = gel_categories; cli != NULL; cli = cli->next) {
char *cat = cli->data; HelpCategory *cats = cli->data;
HelpCategory *cats;
cats = get_category (cat, FALSE /* insert */);
if (cats != NULL && if (cats != NULL &&
cats->name != NULL && cats->name != NULL &&
! cats->internal) { ! cats->internal) {
dump_a_string (outfile, cats->name); dump_a_string (outfile, cats->name);
} }
dump_cat (outfile, cat); dump_cat (outfile, cats->category);
cli->data = NULL; cli->data = NULL;
g_free (cat);
} }
g_slist_free (categories);
dump_cat (outfile, NULL); dump_cat (outfile, NULL);
} }
......
...@@ -818,6 +818,18 @@ d_getcontext_global (void) ...@@ -818,6 +818,18 @@ d_getcontext_global (void)
} }
} }
static int
lowercase_ascii_sum_square (const char *id)
{
int sum = 0;
int i;
for (i = 0; id[i] != '\0'; i++) {
int n = g_ascii_tolower (id[i]) - 'a';
sum += n*n;
}
return sum;
}
static int static int
lowercase_ascii_sum (const char *id) lowercase_ascii_sum (const char *id)
{ {
...@@ -891,13 +903,16 @@ are_ids_similar (const char *id1, const char *id2) ...@@ -891,13 +903,16 @@ are_ids_similar (const char *id1, const char *id2)
if (len1 > 6 && len1 == len2) { if (len1 > 6 && len1 == len2) {
int sum1, sum2; int sum1, sum2;
int sum1s, sum2s;
sum1 = lowercase_ascii_sum (id1); sum1 = lowercase_ascii_sum (id1);
sum2 = lowercase_ascii_sum (id2); sum2 = lowercase_ascii_sum (id2);
/* just a reordering (possibly) sum1s = lowercase_ascii_sum_square (id1);
(won't work right on small words) */ sum2s = lowercase_ascii_sum_square (id2);
if (sum1 == sum2) {
/* just a reordering (possibly) */
if (sum1 == sum2 && sum1s == sum2s) {
return TRUE; return TRUE;
} }
} }
......
...@@ -156,6 +156,9 @@ main(int argc, char *argv[]) ...@@ -156,6 +156,9 @@ main(int argc, char *argv[])
exit(1); exit(1);
} }
/* for some reasons we get SIGINT sometimes because of vte? */
signal (SIGINT, SIG_IGN);
rl_catch_signals = 1; rl_catch_signals = 1;
rl_catch_sigwinch = 1; rl_catch_sigwinch = 1;
rl_terminal_name = "xterm"; rl_terminal_name = "xterm";
......
...@@ -243,6 +243,8 @@ static void display_warning (GtkWidget *parent, const char *warn); ...@@ -243,6 +243,8 @@ static void display_warning (GtkWidget *parent, const char *warn);
static void actually_open_help (const char *id); static void actually_open_help (const char *id);
static void fork_helper_setup_comm (void);
static GtkActionEntry entries[] = { static GtkActionEntry entries[] = {
{ "FileMenu", NULL, N_("_File") }, /* name, stock id, label */ { "FileMenu", NULL, N_("_File") }, /* name, stock id, label */
{ "EditMenu", NULL, N_("_Edit") }, /* name, stock id, label */ { "EditMenu", NULL, N_("_Edit") }, /* name, stock id, label */
...@@ -1615,7 +1617,9 @@ gel_printout_infos (void) ...@@ -1615,7 +1617,9 @@ gel_printout_infos (void)
static void static void
actually_open_help (const char *id) actually_open_help (const char *id)
{ {
#if GTK_CHECK_VERSION(2,14,0) /* breaks binary back compatibility */
#if 0
/*#if GTK_CHECK_VERSION(2,14,0) */
GError *error = NULL; GError *error = NULL;
char *str; char *str;
...@@ -1636,7 +1640,8 @@ actually_open_help (const char *id) ...@@ -1636,7 +1640,8 @@ actually_open_help (const char *id)
g_free (str); g_free (str);
g_error_free (error); g_error_free (error);
} }
#else /*#else*/
#endif
char *xdgopen; char *xdgopen;
char *uri; char *uri;
char *file = NULL; char *file = NULL;
...@@ -1695,7 +1700,7 @@ actually_open_help (const char *id) ...@@ -1695,7 +1700,7 @@ actually_open_help (const char *id)
g_free (xdgopen); g_free (xdgopen);
g_free (uri); g_free (uri);
#endif /*#endif*/
} }
void void
...@@ -2121,9 +2126,18 @@ setup_response (GtkWidget *widget, gint resp, gpointer data) ...@@ -2121,9 +2126,18 @@ setup_response (GtkWidget *widget, gint resp, gpointer data)
default_console_font : default_console_font :
genius_setup.font); genius_setup.font);
setup_term_color (); setup_term_color ();
/* breaks binary back compatibility */
/*#if VTE_CHECK_VERSION(0,17,1)
vte_terminal_set_cursor_blink_mode
(VTE_TERMINAL (term),
genius_setup.blinking_cursor ?
VTE_CURSOR_BLINK_SYSTEM :
VTE_CURSOR_BLINK_OFF);
#else*/
vte_terminal_set_cursor_blinks vte_terminal_set_cursor_blinks
(VTE_TERMINAL (term), (VTE_TERMINAL (term),
genius_setup.blinking_cursor); genius_setup.blinking_cursor);
/*#endif */
if (resp == GTK_RESPONSE_OK || if (resp == GTK_RESPONSE_OK ||
...@@ -4387,12 +4401,48 @@ fork_a_helper (void) ...@@ -4387,12 +4401,48 @@ fork_a_helper (void)
g_free (foo); g_free (foo);
} }
static void
genius_got_etree (GelETree *e)
{
if (e != NULL) {
calc_running ++;
gel_evalexp_parsed (e, main_out, "= \e[1;36m", TRUE);
gel_test_max_nodes_again ();
calc_running --;
gel_output_full_string (main_out, "\e[0m");
gel_output_flush (main_out);
}
gel_printout_infos ();
if (gel_got_eof) {
gel_output_full_string (main_out, "\n");
gel_output_flush (main_out);
gel_got_eof = FALSE;
gtk_main_quit();
}
}
static gboolean static gboolean
get_new_line (GIOChannel *source, GIOCondition condition, gpointer data) get_new_line (GIOChannel *source, GIOCondition condition, gpointer data)
{ {
int fd = g_io_channel_unix_get_fd (source); int fd = g_io_channel_unix_get_fd (source);
int r; int r;
char buf[5] = "EOF!"; char buf[5] = "EOF!";
if (condition & G_IO_HUP) {
char *str;
str = g_strdup_printf ("\r\n\e[01;31m%s\e[0m\r\n",
_("Readline helper died, weird. Trying to recover, things may be odd."));
vte_terminal_feed (VTE_TERMINAL (term), str, -1);
g_free (str);
close (fromrl);
fclose (torlfp);
fork_helper_setup_comm ();
start_cb_p_expression (genius_got_etree, torlfp);
return FALSE;
}
if ( ! (condition & G_IO_IN)) if ( ! (condition & G_IO_IN))
return TRUE; return TRUE;
...@@ -4431,27 +4481,24 @@ get_new_line (GIOChannel *source, GIOCondition condition, gpointer data) ...@@ -4431,27 +4481,24 @@ get_new_line (GIOChannel *source, GIOCondition condition, gpointer data)
} }
static void static void
genius_got_etree (GelETree *e) fork_helper_setup_comm (void)
{ {
if (e != NULL) { GIOChannel *channel;
calc_running ++;
gel_evalexp_parsed (e, main_out, "= \e[1;36m", TRUE);
gel_test_max_nodes_again ();
calc_running --;
gel_output_full_string (main_out, "\e[0m");
gel_output_flush (main_out);
}
gel_printout_infos (); fork_a_helper ();
if (gel_got_eof) { torlfp = fopen (torlfifo, "w");
gel_output_full_string (main_out, "\n");
gel_output_flush (main_out); fromrl = open (fromrlfifo, O_RDONLY);
gel_got_eof = FALSE; g_assert (fromrl >= 0);
gtk_main_quit();
} channel = g_io_channel_unix_new (fromrl);
g_io_add_watch_full (channel, G_PRIORITY_DEFAULT, G_IO_IN | G_IO_HUP | G_IO_ERR,
get_new_line, NULL, NULL);
g_io_channel_unref (channel);
} }
static char * static char *
make_a_fifo (const char *postfix) make_a_fifo (const char *postfix)
{ {
...@@ -4709,7 +4756,6 @@ main (int argc, char *argv[]) ...@@ -4709,7 +4756,6 @@ main (int argc, char *argv[])
GtkWidget *w; GtkWidget *w;
char *file; char *file;
int plugin_count = 0; int plugin_count = 0;
GIOChannel *channel;
gboolean give_no_lib_error_after_init = FALSE; gboolean give_no_lib_error_after_init = FALSE;
genius_is_gui = TRUE; genius_is_gui = TRUE;
...@@ -4771,7 +4817,8 @@ main (int argc, char *argv[]) ...@@ -4771,7 +4817,8 @@ main (int argc, char *argv[])
_("Cannot find the library file, genius installation may be incorrect")); _("Cannot find the library file, genius installation may be incorrect"));
} }
setup_rl_fifos (); /*read parameters */
get_properties ();
main_out = gel_output_new(); main_out = gel_output_new();
gel_output_setup_string (main_out, 80, get_term_width); gel_output_setup_string (main_out, 80, get_term_width);
...@@ -4781,11 +4828,6 @@ main (int argc, char *argv[]) ...@@ -4781,11 +4828,6 @@ main (int argc, char *argv[])
statechange_hook = set_state; statechange_hook = set_state;
_gel_tree_limit_hook = tree_limit_hit; _gel_tree_limit_hook = tree_limit_hit;
gel_read_plugin_list ();
/*read parameters */
get_properties ();
file = g_build_filename (genius_datadir, file = g_build_filename (genius_datadir,
"icons", "icons",
"hicolor", "hicolor",
...@@ -4832,7 +4874,6 @@ main (int argc, char *argv[]) ...@@ -4832,7 +4874,6 @@ main (int argc, char *argv[])
term = vte_terminal_new (); term = vte_terminal_new ();
vte_terminal_set_scrollback_lines (VTE_TERMINAL (term), vte_terminal_set_scrollback_lines (VTE_TERMINAL (term),
genius_setup.scrollback); genius_setup.scrollback);
vte_terminal_set_cursor_blinks (VTE_TERMINAL (term), TRUE);
vte_terminal_set_audible_bell (VTE_TERMINAL (term), TRUE); vte_terminal_set_audible_bell (VTE_TERMINAL (term), TRUE);
vte_terminal_set_scroll_on_keystroke (VTE_TERMINAL (term), TRUE); vte_terminal_set_scroll_on_keystroke (VTE_TERMINAL (term), TRUE);
vte_terminal_set_scroll_on_output (VTE_TERMINAL (term), FALSE); vte_terminal_set_scroll_on_output (VTE_TERMINAL (term), FALSE);
...@@ -4856,42 +4897,6 @@ main (int argc, char *argv[]) ...@@ -4856,42 +4897,6 @@ main (int argc, char *argv[])
(vte_terminal_get_adjustment (VTE_TERMINAL (term))); (vte_terminal_get_adjustment (VTE_TERMINAL (term)));
gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0);
if (gel_plugin_list != NULL) {
GSList *li;
int i;
GtkWidget *menu = GTK_MENU_ITEM (gtk_ui_manager_get_widget (genius_ui, "/MenuBar/PluginsMenu"))->submenu;
for (i = 0, li = gel_plugin_list;
li != NULL;
li = li->next, i++) {
GtkWidget *item;
GelPlugin *plug = li->data;
if (plug->hide)
continue;
item = gtk_menu_item_new_with_label (plug->name);
g_signal_connect (item, "select",
G_CALLBACK (simple_menu_item_select_cb),
plug->description);
g_signal_connect (item, "deselect",
G_CALLBACK (simple_menu_item_deselect_cb),
plug->description);
gtk_widget_show (item);
g_signal_connect (G_OBJECT (item), "activate",
G_CALLBACK (open_plugin_cb), plug);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
plugin_count ++;
}
}
/* if no plugins, hide the menu */
if (plugin_count == 0) {
gtk_widget_hide (gtk_ui_manager_get_widget (genius_ui, "/MenuBar/PluginsMenu"));
} else {
gtk_widget_show (gtk_ui_manager_get_widget (genius_ui, "/MenuBar/PluginsMenu"));
gtk_widget_hide (gtk_ui_manager_get_widget (genius_ui, "/MenuBar/PluginsMenu/NoPlugin"));
}
/*set up the main window*/ /*set up the main window*/
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
hbox, hbox,
...@@ -4921,16 +4926,69 @@ main (int argc, char *argv[]) ...@@ -4921,16 +4926,69 @@ main (int argc, char *argv[])
default_console_font : default_console_font :
genius_setup.font); genius_setup.font);
setup_term_color (); setup_term_color ();
/* breaks binary back compatibility */
/* #if VTE_CHECK_VERSION(0,17,1)
vte_terminal_set_cursor_blink_mode
(VTE_TERMINAL (term),
genius_setup.blinking_cursor ?
VTE_CURSOR_BLINK_SYSTEM :
VTE_CURSOR_BLINK_OFF);
#else*/
vte_terminal_set_cursor_blinks vte_terminal_set_cursor_blinks
(VTE_TERMINAL (term), (VTE_TERMINAL (term),
genius_setup.blinking_cursor); genius_setup.blinking_cursor);
/*#endif*/
vte_terminal_set_encoding (VTE_TERMINAL (term), "UTF-8"); vte_terminal_set_encoding (VTE_TERMINAL (term), "UTF-8");
update_term_geometry (); update_term_geometry ();
g_signal_connect (G_OBJECT (term), "char-size-changed", g_signal_connect (G_OBJECT (term), "char-size-changed",
G_CALLBACK (update_term_geometry), NULL); G_CALLBACK (update_term_geometry), NULL);
gtk_widget_hide (gtk_ui_manager_get_widget (genius_ui, "/MenuBar/PluginsMenu"));
/* Show the window now before going on with the
* setup */
gtk_widget_show_now (genius_window); gtk_widget_show_now (genius_window);
check_events ();
gel_read_plugin_list ();
if (gel_plugin_list != NULL) {
GSList *li;
int i;
GtkWidget *menu = GTK_MENU_ITEM (gtk_ui_manager_get_widget (genius_ui, "/MenuBar/PluginsMenu"))->submenu;
for (i = 0, li = gel_plugin_list;
li != NULL;
li = li->next, i++) {
GtkWidget *item;
GelPlugin *plug = li->data;
if (plug->hide)
continue;
item = gtk_menu_item_new_with_label (plug->name);
g_signal_connect (item, "select",
G_CALLBACK (simple_menu_item_select_cb),
plug->description);
g_signal_connect (item, "deselect",
G_CALLBACK (simple_menu_item_deselect_cb),
plug->description);
gtk_widget_show (item);
g_signal_connect (G_OBJECT (item), "activate",
G_CALLBACK (open_plugin_cb), plug);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
plugin_count ++;
}
}
/* if no plugins, hide the menu */
if (plugin_count == 0) {
gtk_widget_hide (gtk_ui_manager_get_widget (genius_ui, "/MenuBar/PluginsMenu"));
} else {
gtk_widget_show (gtk_ui_manager_get_widget (genius_ui, "/MenuBar/PluginsMenu"));
gtk_widget_hide (gtk_ui_manager_get_widget (genius_ui, "/MenuBar/PluginsMenu/NoPlugin"));
}
gel_output_printf (main_out, gel_output_printf (main_out,
_("%sGenius %s%s\n" _("%sGenius %s%s\n"
...@@ -4956,17 +5014,9 @@ main (int argc, char *argv[]) ...@@ -4956,17 +5014,9 @@ main (int argc, char *argv[])
set_new_errorout (geniuserror); set_new_errorout (geniuserror);
set_new_infoout (geniusinfo); set_new_infoout (geniusinfo);
fork_a_helper (); setup_rl_fifos ();
torlfp = fopen (torlfifo, "w");
fromrl = open (fromrlfifo, O_RDONLY);
g_assert (fromrl >= 0);
channel = g_io_channel_unix_new (fromrl); fork_helper_setup_comm ();
g_io_add_watch_full (channel, G_PRIORITY_DEFAULT, G_IO_IN | G_IO_HUP | G_IO_ERR,
get_new_line, NULL, NULL);
g_io_channel_unref (channel);
/*init the context stack and clear out any stale dictionaries /*init the context stack and clear out any stale dictionaries
except the global one, if this is the first time called it except the global one, if this is the first time called it
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment