static gboolean draw_handler(GtkWidget *widget, cairo_t *cr, gpointer data) { gmpv_handle *ctx = data; guint signal_id = g_signal_lookup("draw", MAIN_WINDOW_TYPE); g_signal_handlers_disconnect_matched( widget, G_SIGNAL_MATCH_ID |G_SIGNAL_MATCH_DATA, signal_id, 0, 0, NULL, ctx ); mpv_init(ctx); mpv_set_wakeup_callback(ctx->mpv_ctx, mpv_wakeup_callback, ctx); if(!ctx->files) { control_box_set_enabled (CONTROL_BOX(ctx->gui->control_box), FALSE); } return FALSE; }
void remove_current_playlist_entry(gmpv_handle *ctx) { const gchar *cmd[] = {"playlist_remove", NULL, NULL}; PlaylistWidget *playlist; GtkTreePath *path; playlist = PLAYLIST_WIDGET(ctx->gui->playlist); gtk_tree_view_get_cursor ( GTK_TREE_VIEW(playlist->tree_view), &path, NULL ); if(path) { gint index; gchar *index_str; index = gtk_tree_path_get_indices(path)[0]; index_str = g_strdup_printf("%d", index); cmd[1] = index_str; g_signal_handlers_block_matched ( playlist->list_store, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, ctx ); playlist_widget_remove(playlist, index); if(ctx->loaded) { mpv_check_error(mpv_command(ctx->mpv_ctx, cmd)); } if(playlist_widget_empty(playlist)) { control_box_set_enabled (CONTROL_BOX(ctx->gui->control_box), FALSE); } g_signal_handlers_unblock_matched ( playlist->list_store, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, ctx ); g_free(index_str); } }
gboolean update_seek_bar(gpointer data) { gmpv_handle *ctx = data; gdouble time_pos; gint rc; rc = mpv_get_property( ctx->mpv_ctx, "time-pos", MPV_FORMAT_DOUBLE, &time_pos ); if(rc >= 0) { ControlBox *control_box = CONTROL_BOX(ctx->gui->control_box); gtk_range_set_value ( GTK_RANGE(control_box->seek_bar), time_pos ); } return TRUE; }
void main_window_reset(MainWindow *wnd) { gtk_window_set_title(GTK_WINDOW(wnd), g_get_application_name()); control_box_reset_control(CONTROL_BOX(wnd->control_box)); }
void main_window_toggle_fullscreen(MainWindow *wnd) { ControlBox *control_box = CONTROL_BOX(wnd->control_box); GtkContainer* main_box = GTK_CONTAINER(wnd->main_box); GtkContainer* fs_control = GTK_CONTAINER(wnd->fs_control); if(wnd->fullscreen) { g_object_ref(wnd->control_box); gtk_container_remove(fs_control, wnd->control_box); gtk_container_add(main_box, wnd->control_box); g_object_unref(wnd->control_box); control_box_set_fullscreen_state(control_box, FALSE); gtk_window_unfullscreen(GTK_WINDOW(wnd)); gtk_widget_hide(wnd->fs_control); if(main_window_get_csd_enabled(wnd)) { control_box_set_fullscreen_btn_visible (CONTROL_BOX(wnd->control_box), FALSE); } else { gtk_application_window_set_show_menubar (GTK_APPLICATION_WINDOW(wnd), TRUE); } if(wnd->playlist_visible) { gtk_widget_show(wnd->playlist); } wnd->fullscreen = FALSE; } else { GdkScreen *screen; gint width; gint height; screen = gtk_window_get_screen(GTK_WINDOW(wnd)); width = gdk_screen_width()/2; g_object_ref(wnd->control_box); gtk_container_remove(main_box, wnd->control_box); gtk_container_add(fs_control, wnd->control_box); g_object_unref(wnd->control_box); control_box_set_fullscreen_state(control_box, TRUE); gtk_window_fullscreen(GTK_WINDOW(wnd)); gtk_window_set_screen(GTK_WINDOW(wnd->fs_control), screen); gtk_widget_show(wnd->fs_control); gtk_widget_set_opacity(wnd->fs_control, 0); if(main_window_get_csd_enabled(wnd)) { control_box_set_fullscreen_btn_visible (CONTROL_BOX(wnd->control_box), TRUE); } else { gtk_application_window_set_show_menubar (GTK_APPLICATION_WINDOW(wnd), FALSE); } if(wnd->playlist_visible) { gtk_widget_hide(wnd->playlist); } gtk_window_get_size( GTK_WINDOW(wnd->fs_control), NULL, &height ); gtk_window_resize( GTK_WINDOW(wnd->fs_control), width, height ); gtk_window_move( GTK_WINDOW(wnd->fs_control), (gdk_screen_width()/2)-(width/2), gdk_screen_height()-height ); gtk_window_set_transient_for( GTK_WINDOW(wnd->fs_control), GTK_WINDOW(wnd) ); wnd->fullscreen = TRUE; } }
static void app_startup_handler(GApplication *app, gpointer data) { gmpv_handle *ctx = data; const gchar *vid_area_style = ".gmpv-vid-area{background-color: black}"; GSettingsBackend *config_backend; GtkCssProvider *style_provider; gboolean css_loaded; gboolean use_opengl; gboolean config_migrated; gboolean mpvinput_enable; gboolean csd_enable; gboolean dark_theme_enable; gchar *config_file; gchar *mpvinput; setlocale(LC_NUMERIC, "C"); g_set_application_name(_("GNOME MPV")); gtk_window_set_default_icon_name(ICON_NAME); bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); config_file = get_config_file_path(); config_backend = g_keyfile_settings_backend_new ( config_file, CONFIG_ROOT_PATH, CONFIG_ROOT_GROUP ); use_opengl = get_use_opengl(); ctx->mpv_ctx = mpv_create(); ctx->files = NULL; ctx->opengl_ctx = NULL; ctx->opengl_ready = FALSE; ctx->paused = TRUE; ctx->loaded = FALSE; ctx->new_file = TRUE; ctx->sub_visible = TRUE; ctx->init_load = TRUE; ctx->playlist_move_dest = -1; ctx->log_level_list = NULL; ctx->keybind_list = NULL; ctx->config = g_settings_new_with_backend(APP_ID, config_backend); ctx->app = GTK_APPLICATION(app); ctx->gui = MAIN_WINDOW(main_window_new(ctx->app, use_opengl)); ctx->fs_control = NULL; ctx->playlist_store = PLAYLIST_WIDGET(ctx->gui->playlist)->list_store; config_migrated = migrate_config(ctx); style_provider = gtk_css_provider_new(); css_loaded = gtk_css_provider_load_from_data (style_provider, vid_area_style, -1, NULL); if(!css_loaded) { g_warning ("Failed to apply background color css"); } gtk_style_context_add_provider_for_screen ( gtk_window_get_screen(GTK_WINDOW(ctx->gui)), GTK_STYLE_PROVIDER(style_provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION ); g_object_unref(style_provider); csd_enable = g_settings_get_boolean (ctx->config, "csd-enable"); dark_theme_enable = g_settings_get_boolean (ctx->config, "dark-theme-enable"); mpvinput_enable = g_settings_get_boolean (ctx->config, "mpv-input-config-enable"); mpvinput = g_settings_get_string (ctx->config, "mpv-input-config-file"); if(csd_enable) { gtk_application_set_app_menu (ctx->app, G_MENU_MODEL(build_app_menu())); main_window_enable_csd(ctx->gui); } else { gtk_application_set_app_menu (ctx->app, NULL); gtk_application_set_menubar (ctx->app, G_MENU_MODEL(build_full_menu())); } gtk_widget_show_all(GTK_WIDGET(ctx->gui)); if(csd_enable) { control_box_set_fullscreen_btn_visible (CONTROL_BOX(ctx->gui->control_box), FALSE); } control_box_set_chapter_enabled (CONTROL_BOX(ctx->gui->control_box), FALSE); if(!main_window_get_use_opengl(ctx->gui)) { ctx->vid_area_wid = get_xid(ctx->gui->vid_area); } g_assert( main_window_get_use_opengl(ctx->gui) || ctx->vid_area_wid != -1 ); main_window_load_state(ctx->gui); setup_accelerators(ctx); setup_dnd_targets(ctx); actionctl_map_actions(ctx); connect_signals(ctx); load_keybind(ctx, mpvinput_enable?mpvinput:NULL, FALSE); mpris_init(ctx); media_keys_init(ctx); g_object_set( ctx->gui->settings, "gtk-application-prefer-dark-theme", dark_theme_enable, NULL ); g_timeout_add( SEEK_BAR_UPDATE_INTERVAL, (GSourceFunc)update_seek_bar, ctx ); if(config_migrated) { GtkWidget *dialog = gtk_message_dialog_new ( GTK_WINDOW(ctx->gui), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, _("Your configuration file has been " "moved to the new location at %s."), config_file ); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } g_free(config_file); g_free(mpvinput); }