Hi, Well there was some redundant code. This actually fixes it:
http://git.savannah.nongnu.org/cgit/gsequencer.git/tree/ags/X/file/ags_simple_file.c?h=1.5.x#n1904 Bests, Joël On Thu, Jan 25, 2018 at 11:16 PM, Joël Krähemann <jkraehem...@gmail.com> wrote: > Hi, > You do some async work? Read about: > > g_timeout_add_full(); > > and > > g_main_context_iteration(); > > You, can callback the to the UI forwarded event. I do something similar > as reading a file from a different thread: > > http://git.savannah.nongnu.org/cgit/gsequencer.git/tree/ags/X/file/ags_simple_file.c?h=1.4.x#n1957 > > FYI: the UI thread shall run always by gtk_main(). > > Bests, > Joël > > On Thu, Jan 25, 2018 at 11:10 PM, Alexander Koeppe > <alexander@koeppe.rocks> wrote: >> Thanks Lucky, >> >> Good idea to create the widget right away and hide it until it's time. >> >> However, just by accident, I got back the app-menu in the window. >> >> Try this with the code below: >> >> 1. After I selected "Restart" simulating the pause and resume, the >> app-menu disappeared. >> 2. Then I double-clicked the header-bar to maximise the window and the >> app-menu reappeared. >> 3. Again double-clicked the header-bar to restore the original geometry >> the app-menu is still there. >> >> This is what I want. Question is, what happens when I double click the >> header-bar and can I emulate this event in code? >> >> I feel being just 1 grain off my goal.... >> >> Thanks >> >> -Alex >> >> >> Am 23.01.2018 um 22:37 schrieb Lucky B.C: >>> Wow, I see your problem is that you did not understand what GtkBuilder >>> and Gtk are doing, Because If I'm not wrong, each choice (entry) is a >>> function to start something you want to do after the user/you clicked >>> to the button called "restart". Here's my solution, it's maybe help >>> you. >>> >>> *) You can use gtk_widget_hide (target) function to hide any widget, >>> in this case it's the main window. Then you can do your low-level >>> functions what the other can see at the time after the signal >>> "clicked" activated. >>> >>> Note: Some programs I saw the program did not exit when it's called to >>> restart, there's only the changed/related data must be reload to >>> buffer/ram, and the program must stop rendering/running at the time, >>> after the reloading's done the program continues to render/display the >>> new data in the screen. The reloading can be done in a new thread too, >>> after used you can delete it too. >>> >>> On Wed, Jan 24, 2018 at 2:52 AM, Alexander Koeppe >>> <alexander@koeppe.rocks> wrote: >>>> I know about the possiblity to fire the low-level functions using an button >>>> callback. However this would draw an exception for other UI choices the >>>> application has: e.g. text, deamon. >>>> >>>> Therefore I'm looking for a way to keep the application structure for all >>>> UIs the same. >>>> >>>> There is the test app I'm playing with: >>>> >>>> >>>> #include <gtk/gtk.h> >>>> >>>> GtkApplication *app; >>>> GtkWidget *window; >>>> int initialized = 0; >>>> >>>> void quit_cb(GSimpleAction *action, GVariant *value, gpointer data) >>>> { >>>> g_print("quit!\n"); >>>> g_object_unref(app); >>>> exit(0); >>>> } >>>> >>>> void restart_cb(GSimpleAction *action, GVariant *value, gpointer data) >>>> { >>>> g_print("restart!\n"); >>>> g_application_quit(G_APPLICATION(app)); >>>> } >>>> >>>> void test_cb(GSimpleAction *action, GVariant *value, gpointer data) >>>> { >>>> GtkWidget *dialog; >>>> GtkDialogFlags flags = GTK_DIALOG_DESTROY_WITH_PARENT; >>>> >>>> >>>> dialog = gtk_message_dialog_new(GTK_WINDOW(window), >>>> flags, >>>> GTK_MESSAGE_ERROR, >>>> GTK_BUTTONS_CLOSE, >>>> "TEst Message"); >>>> g_signal_connect_swapped(dialog, "response", >>>> G_CALLBACK(gtk_widget_destroy), >>>> dialog); >>>> gtk_dialog_run(GTK_DIALOG(dialog)); >>>> } >>>> >>>> static void shutdown(GtkApplication *app, gpointer data) >>>> { >>>> initialized = 1; >>>> } >>>> >>>> static void >>>> activate (GtkApplication *app, >>>> gpointer user_data) >>>> { >>>> GtkWidget *header, *menubutton, *frame, *overlay, *combo, *box; >>>> GtkBuilder *builder; >>>> >>>> GActionEntry actions[] = { >>>> {"test_action", test_cb, NULL, NULL, NULL,{}}, >>>> {"restart", restart_cb, NULL, NULL, NULL, {}}, >>>> {"quit", quit_cb, NULL, NULL, NULL, {}} >>>> }; >>>> >>>> >>>> g_action_map_add_action_entries(G_ACTION_MAP(app), actions, >>>> G_N_ELEMENTS(actions), app); >>>> >>>> >>>> >>>> if (initialized == 0) { >>>> window = gtk_application_window_new (app); >>>> gtk_window_set_default_size (GTK_WINDOW (window), 500, 300); >>>> } >>>> else { >>>> gtk_application_add_window(app, GTK_WINDOW(window)); >>>> } >>>> gtk_window_set_title (GTK_WINDOW (window), "buildertest"); >>>> >>>> /* Header Bar */ >>>> header = gtk_header_bar_new(); >>>> gtk_header_bar_set_title(GTK_HEADER_BAR(header), "Yeah"); >>>> gtk_header_bar_set_show_close_button(GTK_HEADER_BAR(header), TRUE); >>>> gtk_window_set_titlebar(GTK_WINDOW(window), header); >>>> >>>> /* Menu Button */ >>>> menubutton = gtk_menu_button_new(); >>>> >>>> /* Menu for Menubutton */ >>>> builder = gtk_builder_new(); >>>> gtk_builder_add_from_string(builder, >>>> "<interface>" >>>> " <menu id='app-menu'>" >>>> " <section>" >>>> " <item>" >>>> " <attribute name='label' >>>> translatable='yes'>Restart</attribute>" >>>> " <attribute name='action'>app.restart</attribute>" >>>> " </item>" >>>> " <item>" >>>> " <attribute name='label' >>>> translatable='yes'>Quit</attribute>" >>>> " <attribute name='action'>app.quit</attribute>" >>>> " </item>" >>>> " </section>" >>>> " </menu>" >>>> " <menu id='test-menu'>" >>>> " <section>" >>>> " <attribute name='label' translatable='yes'>Test</attribute>" >>>> " <item>" >>>> " <attribute name='label' translatable='yes'>Test >>>> Entry</attribute>" >>>> " <attribute name='action'>app.test_action</attribute>" >>>> " <attribute name='accel'>t</attribute>" >>>> " </item>" >>>> " </section>" >>>> " </menu>" >>>> "</interface>", -1, NULL); >>>> >>>> gtk_application_set_app_menu(GTK_APPLICATION(app), >>>> G_MENU_MODEL(gtk_builder_get_object(builder, "app-menu"))); >>>> >>>> gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(menubutton), >>>> G_MENU_MODEL(gtk_builder_get_object(builder, "test-menu"))); >>>> >>>> gtk_button_set_image(GTK_BUTTON(menubutton), >>>> gtk_image_new_from_icon_name("open-menu-symbolic", >>>> GTK_ICON_SIZE_MENU)); >>>> gtk_header_bar_pack_end(GTK_HEADER_BAR(header), menubutton); >>>> >>>> /* content area */ >>>> if (initialized) { >>>> overlay = gtk_bin_get_child(GTK_BIN(window)); >>>> gtk_container_remove(GTK_CONTAINER(window), overlay); >>>> } >>>> >>>> overlay = gtk_overlay_new(); >>>> gtk_container_add(GTK_CONTAINER(window), overlay); >>>> >>>> frame = gtk_frame_new("Rahmen"); >>>> gtk_container_add(GTK_CONTAINER(overlay), frame); >>>> >>>> box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); >>>> gtk_container_add(GTK_CONTAINER(frame), box); >>>> >>>> combo = gtk_combo_box_text_new(); >>>> gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combo), "id1", "Entry 1"); >>>> gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combo), "id2", "Entry 2"); >>>> gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0); >>>> gtk_widget_set_hexpand(combo, TRUE); >>>> >>>> gtk_box_pack_start(GTK_BOX(box), combo, FALSE, FALSE, 0); >>>> >>>> >>>> >>>> gtk_widget_show_all(window); >>>> } >>>> >>>> int main(int argc, >>>> char *argv[]) >>>> { >>>> app = NULL; >>>> int status; >>>> >>>> app = gtk_application_new ("org.gnome.Buildertest", >>>> G_APPLICATION_FLAGS_NONE); >>>> g_signal_connect (app, "activate", G_CALLBACK (activate), NULL); >>>> g_signal_connect (app, "shutdown", G_CALLBACK(shutdown), NULL); >>>> status = g_application_run (G_APPLICATION (app), argc, argv); >>>> >>>> g_print("some things happen here\n"); >>>> >>>> g_object_unref(G_OBJECT(app)); >>>> >>>> app = gtk_application_new ("org.gnome.Buildertest", >>>> G_APPLICATION_FLAGS_NONE); >>>> g_signal_connect (app, "activate", G_CALLBACK (activate), NULL); >>>> status = g_application_run (G_APPLICATION (app), argc, argv); >>>> >>>> return status; >>>> } >>>> >>>> >>>> Am 22.01.2018 um 22:09 schrieb Lucky B.C: >>>> >>>> Hi, can you show your demo about the way you did? But I think you should >>>> keep the gtk_main() runs, because you can run your low-level functions by >>>> "clicked" signal on button. >>>> >>>> On Jan 23, 2018 03:44, "Alexander Koeppe" <alexander@koeppe.rocks> wrote: >>>> >>>> Hi, >>>> >>>> I have an application where some things need to be setup in the UI, then >>>> some low-level routines to be executed using the setup values and then >>>> resuming the UI loop for further operation. >>>> >>>> Since I'm migrating the GTK code from GTK2/3 compatible to GNOME/GTK3, I >>>> make use of g_application_run(). >>>> >>>> However, I find no simialar way to interrupt the loop (e.g. >>>> gtk_main_quit()) and resuming the UI later (gtk_main()). >>>> >>>> The only way I found yet is to quit the application using >>>> g_application_quit() but keep the window widget, clearing the >>>> application (g_object_unref()) and creating a new application after >>>> executing the low-level routines and finally adding the still existing >>>> window widget to this new application using >>>> gtk_application_add_window(). This way I can reuse the window and avoid >>>> any flickering which is the required effect. >>>> >>>> The only caveat is, the added window is not considered being the primary >>>> instance of the second application, hence the app-menu isn't displayed. >>>> >>>> Is there any way to define a window added being the primary instance of >>>> the application or to show the app-menu (set using >>>> gtk_application_set_app_menu()) in such an non-primary window, or even a >>>> complete different approach? >>>> >>>> >>>> Thanks and regards >>>> >>>> - Alex >>>> >>>> >>>> _______________________________________________ >>>> gtk-app-devel-list mailing list >>>> gtk-app-devel-list@gnome.org >>>> https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list >>>> >>>> >>>> >> >> >> _______________________________________________ >> gtk-app-devel-list mailing list >> gtk-app-devel-list@gnome.org >> https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list