Added disconnecting signals, fixed logview
This commit is contained in:
parent
73c7c463ad
commit
719a3a053d
1 changed files with 47 additions and 16 deletions
|
@ -93,7 +93,9 @@ void on_gm_app_view_world_state_changing(GmWorld *world, GmNetState state,
|
||||||
GmAppView *view);
|
GmAppView *view);
|
||||||
void on_gm_app_view_world_active_changed(GmWorld *world, gboolean active,
|
void on_gm_app_view_world_active_changed(GmWorld *world, gboolean active,
|
||||||
GmAppView *view);
|
GmAppView *view);
|
||||||
|
void on_gm_app_view_world_view_destroy(GmWorldView *world_view,
|
||||||
|
GmAppView *view);
|
||||||
|
|
||||||
#define GM_APP_VIEW_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), \
|
#define GM_APP_VIEW_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), \
|
||||||
GM_TYPE_APP_VIEW, GmAppViewPrivate))
|
GM_TYPE_APP_VIEW, GmAppViewPrivate))
|
||||||
|
|
||||||
|
@ -453,11 +455,7 @@ gm_app_view_set_sensitivity(GmAppView *view, gboolean sens) {
|
||||||
view->priv->action_group, "WorldInfo"), FALSE);
|
view->priv->action_group, "WorldInfo"), FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sens) {
|
if (!sens) {
|
||||||
/* TODO: set world info menu item not sensitive if no world info avail
|
|
||||||
First fix MCP
|
|
||||||
gtk_widget_set_sensitive(if_main_get_widget("mnuWorldInfo"), sens); */
|
|
||||||
} else {
|
|
||||||
gtk_widget_hide(GTK_WIDGET(view->priv->vbox_find));
|
gtk_widget_hide(GTK_WIDGET(view->priv->vbox_find));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -804,8 +802,11 @@ on_gm_app_view_world_load(GmWorld *world, GmAppView *view) {
|
||||||
|
|
||||||
g_signal_connect(gm_world_get_mcp_session(world), "package_created",
|
g_signal_connect(gm_world_get_mcp_session(world), "package_created",
|
||||||
G_CALLBACK(on_gm_app_view_world_mcp_package_created), view);
|
G_CALLBACK(on_gm_app_view_world_mcp_package_created), view);
|
||||||
|
|
||||||
g_signal_connect(world_view, "switch_page",
|
g_signal_connect(world_view, "switch_page",
|
||||||
G_CALLBACK(on_gm_app_view_world_view_notebook_switch_page), view);
|
G_CALLBACK(on_gm_app_view_world_view_notebook_switch_page), view);
|
||||||
|
g_signal_connect(world_view, "destroy",
|
||||||
|
G_CALLBACK(on_gm_app_view_world_view_destroy), view);
|
||||||
|
|
||||||
gtk_notebook_append_page(view->priv->notebook, world_view,
|
gtk_notebook_append_page(view->priv->notebook, world_view,
|
||||||
GTK_WIDGET(tab));
|
GTK_WIDGET(tab));
|
||||||
|
@ -822,12 +823,18 @@ on_gm_app_view_world_load(GmWorld *world, GmAppView *view) {
|
||||||
void
|
void
|
||||||
on_gm_app_view_world_unload(GmWorld *world, GmAppView *view) {
|
on_gm_app_view_world_unload(GmWorld *world, GmAppView *view) {
|
||||||
GmWorldView *world_view = gm_app_view_world_view_from_world(view, world);
|
GmWorldView *world_view = gm_app_view_world_view_from_world(view, world);
|
||||||
|
|
||||||
gtk_notebook_remove_page(view->priv->notebook,
|
g_signal_handlers_disconnect_by_func(gm_world_get_mcp_session(world),
|
||||||
gtk_notebook_page_num(view->priv->notebook, GTK_WIDGET(world_view)));
|
on_gm_app_view_world_mcp_package_created, view);
|
||||||
|
|
||||||
if (gtk_notebook_get_n_pages(view->priv->notebook) == 0) {
|
if (world_view != NULL) {
|
||||||
gm_app_view_worlds_unloaded(view);
|
gtk_notebook_remove_page(view->priv->notebook,
|
||||||
|
gtk_notebook_page_num(view->priv->notebook,
|
||||||
|
GTK_WIDGET(world_view)));
|
||||||
|
|
||||||
|
if (gtk_notebook_get_n_pages(view->priv->notebook) == 0) {
|
||||||
|
gm_app_view_worlds_unloaded(view);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1214,6 +1221,10 @@ on_gm_app_view_world_view_notebook_switch_page(GtkNotebook *notebook,
|
||||||
GmWorldView *world_view = GM_WORLD_VIEW(notebook);
|
GmWorldView *world_view = GM_WORLD_VIEW(notebook);
|
||||||
gboolean direction;
|
gboolean direction;
|
||||||
|
|
||||||
|
if (!GTK_IS_WIDGET(view) || !GTK_IS_WIDGET(page) ||
|
||||||
|
!GTK_IS_WIDGET(view->priv->hbox_control_find))
|
||||||
|
return;
|
||||||
|
|
||||||
gtk_widget_set_sensitive(GTK_WIDGET(view->priv->hbox_control_find),
|
gtk_widget_set_sensitive(GTK_WIDGET(view->priv->hbox_control_find),
|
||||||
gm_world_view_page_can_find(world_view, page_num));
|
gm_world_view_page_can_find(world_view, page_num));
|
||||||
|
|
||||||
|
@ -1247,10 +1258,11 @@ on_gm_app_view_notebook_switch_page(GtkNotebook * notebook,
|
||||||
if (world) {
|
if (world) {
|
||||||
view->priv->active_world = world;
|
view->priv->active_world = world;
|
||||||
gm_world_set_active(view->priv->active_world, TRUE);
|
gm_world_set_active(view->priv->active_world, TRUE);
|
||||||
}
|
|
||||||
|
|
||||||
on_gm_app_view_world_view_notebook_switch_page(GTK_NOTEBOOK(
|
on_gm_app_view_world_view_notebook_switch_page(GTK_NOTEBOOK(
|
||||||
gm_app_view_active_world_view(view)), NULL, 0, view);
|
gm_app_view_active_world_view(view)), NULL, 0, view);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const gchar *authors[] = {
|
static const gchar *authors[] = {
|
||||||
|
@ -1388,7 +1400,10 @@ on_gm_app_view_world_logs(GtkMenuItem *menuitem, GmAppView *view) {
|
||||||
gtk_tree_view_get_selection(tview), &smodel,
|
gtk_tree_view_get_selection(tview), &smodel,
|
||||||
&iter)) {
|
&iter)) {
|
||||||
gtk_tree_model_get(smodel, &iter, 0, &tmp, -1);
|
gtk_tree_model_get(smodel, &iter, 0, &tmp, -1);
|
||||||
tmp2 = g_strconcat(gm_world_path(world), tmp, NULL);
|
tmp2 = g_strconcat(gm_world_path(world),
|
||||||
|
G_DIR_SEPARATOR_S, "logs", G_DIR_SEPARATOR_S,
|
||||||
|
tmp,
|
||||||
|
NULL);
|
||||||
gtk_widget_set_sensitive(GTK_WIDGET(dlg), FALSE);
|
gtk_widget_set_sensitive(GTK_WIDGET(dlg), FALSE);
|
||||||
|
|
||||||
wait_cursor = gdk_cursor_new(GDK_WATCH);
|
wait_cursor = gdk_cursor_new(GDK_WATCH);
|
||||||
|
@ -1453,3 +1468,19 @@ on_gm_app_view_world_mcp_package_created(GmMcpSession *session,
|
||||||
GmMcpPackage *package, GmAppView *view) {
|
GmMcpPackage *package, GmAppView *view) {
|
||||||
gm_mcp_package_create_view(package, G_OBJECT(view));
|
gm_mcp_package_create_view(package, G_OBJECT(view));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
on_gm_app_view_world_view_destroy(GmWorldView *world_view,
|
||||||
|
GmAppView *view) {
|
||||||
|
GmWorld *world = gm_world_view_world(world_view);
|
||||||
|
|
||||||
|
if (gm_world_loaded(world)) {
|
||||||
|
// This only happens when the main view is destroyed when there are
|
||||||
|
// still worlds active. The thing is we need to unload the world here
|
||||||
|
// so that anything GUI related (like mcp things) can proper finalize
|
||||||
|
// Disconnect the unload handler to avoid strange things to happen
|
||||||
|
g_signal_handlers_disconnect_by_func(world,
|
||||||
|
on_gm_app_view_world_unload, view);
|
||||||
|
gm_world_unload(world);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Reference in a new issue