⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainapp.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
hxwindow_get_sign_in_property(HXMainWindow* /* window */,                              const gchar*  key){    GList* pref_iter = g_hx_main_app->sign_in_preferences_list;    while(pref_iter)    {        HXSignInPref* pref = (HXSignInPref*)pref_iter->data;        if(strcmp(key, pref->key) == 0)        {            return pref->value;        }                pref_iter = g_list_next(pref_iter);    }    return NULL;}#endif // HELIX_FEATURE_RP_SIGN_INvoidhxwindow_save_preferences(HXMainWindow* window, GIOChannel* chan){    gchar* line;    gboolean result;    guint i;    GValue val;    /* Write out window preferences */    gchar* uint_props[] =    {        /* XXXRGG: See GnomeClient for proper "session management"           tracking of the last window positions. */                "XPos",        "YPos"    };    gchar* bool_props[] =    {        "EnableRecentUrlsList",        "EnableUrlHurling",    };        gchar* str_props[] =    {        "MediaFilesPath",        "WebBrowserPath",        "LastBrowsedDirectory",        "DistCode",        "OrigCode"    };        memset(&val, 0, sizeof(val));        hxcommon_channel_write(chan, "\n[player]\n");    for(i = 0; i < sizeof(uint_props) / sizeof(*uint_props); i++)    {        if(hxwindow_get_property(window, uint_props[i], &val))        {            line = g_strdup_printf("%s=%d\n",                                   uint_props[i],                                   g_value_get_uint(&val));            result = hxcommon_channel_write(chan, line);            g_free(line);                g_value_unset(&val);            g_return_if_fail(result);        }    }    for(i = 0; i < sizeof(bool_props) / sizeof(*bool_props); i++)    {        if(hxwindow_get_property(window, bool_props[i], &val))        {            line = g_strdup_printf("%s=%d\n",                                   bool_props[i],                                   g_value_get_boolean(&val)? 1: 0);            result = hxcommon_channel_write(chan, line);            g_free(line);                g_value_unset(&val);            g_return_if_fail(result);        }    }    for(i = 0; i < sizeof(str_props) / sizeof(*str_props); i++)    {        if(hxwindow_get_property(window, str_props[i], &val))        {            const gchar* str = g_value_get_string(&val);            if(!str)            {                str = "";            }                        line = g_strdup_printf("%s=%s\n",                                   str_props[i],                                   str);            result = hxcommon_channel_write(chan, line);            g_free(line);                g_value_unset(&val);            g_return_if_fail(result);        }    }        /* Step 3: Write out recently used url's */    GList* recent_iter;    hxcommon_channel_write(chan, "\n[recent_urls]\n");    i = 0;    recent_iter = window->recent_urls_list;    while(recent_iter)    {                line = g_strdup_printf("url%d=%s\n", i, (gchar*)recent_iter->data);                result = hxcommon_channel_write(chan, line);                g_free(line);        g_return_if_fail(result);                i++;        recent_iter = g_list_next(recent_iter);            }    /* Step 4: Write out favorites */    GList* favorites_iter;    hxcommon_channel_write(chan, "\n[favorites]\n");    i = 0;    favorites_iter = g_hx_main_app->favorites_list;    while(favorites_iter)    {        HXFavorite* favorite = (HXFavorite*)favorites_iter->data;        line = g_strdup_printf("favorite_title%d=%s\n", i, favorite->title);        result = hxcommon_channel_write(chan, line);                g_free(line);        line = g_strdup_printf("favorite_url%d=%s\n", i, favorite->url);        result = hxcommon_channel_write(chan, line);                g_free(line);        g_return_if_fail(result);        i++;        favorites_iter = g_list_next(favorites_iter);    }    #ifdef HELIX_FEATURE_RP_SIGN_IN    /* Step 5: Write out sign-in preferences */    GList* iter;    hxcommon_channel_write(chan, "\n[signin]\n");    iter = g_hx_main_app->sign_in_preferences_list;    while(iter)    {        HXSignInPref* pref = (HXSignInPref*)iter->data;        line = g_strdup_printf("%s=%s\n", pref->key, pref->value);        result = hxcommon_channel_write(chan, line);                g_free(line);        g_return_if_fail(result);        iter = g_list_next(iter);    }    #endif // HELIX_FEATURE_RP_SIGN_IN}static gbooleanhide_cursor(gpointer data){    char invisible_cursor_bits[] = { 0x0 };    GdkCursor* cursor;    HXMainWindow* window;    GdkBitmap *empty_bitmap;    GdkColor color = { 0, 0, 0, 0 };        window = (HXMainWindow*) data;        empty_bitmap = gdk_bitmap_create_from_data (window->window->window,                                                invisible_cursor_bits,                                                1, 1);        cursor = gdk_cursor_new_from_pixmap (empty_bitmap,                                         empty_bitmap,                                         &color, &color, 0, 0);    gdk_window_set_cursor(window->window->window, cursor);    gdk_window_set_cursor(window->hxbin->window, cursor);    gdk_cursor_unref(cursor);    g_object_unref(empty_bitmap);    window->fullscreen_hide_cursor_timer_enabled = FALSE;    return FALSE; // remove this timer callback}static voidshow_cursor(HXMainWindow*  window){    /* Show the cursor and reset the hide cursor timeout */    gdk_window_set_cursor(window->window->window, NULL);    gdk_window_set_cursor(window->hxbin->window, NULL);    if(window->fullscreen_hide_cursor_timer_enabled)    {        gtk_timeout_remove(window->fullscreen_hide_cursor_timer_id);        window->fullscreen_hide_cursor_timer_enabled = FALSE;    }}static gbooleanhandle_motion_in_fullscreened_window(GtkWidget* widget,                                     GdkEventMotion* /* event */,                                     HXMainWindow*  window){    show_cursor(window);        /* Re-add hide cursor timeout */    window->fullscreen_hide_cursor_timer_enabled = TRUE;    window->fullscreen_hide_cursor_timer_id =        gtk_timeout_add(HIDE_CURSOR_TIMEOUT * 1000,                        hide_cursor,                        window);            return FALSE; // Propagate}static voidhxwindow_on_top(HXMainWindow* window, gboolean on_top){    gboolean used_net_wm = FALSE;    winutils_window_on_top(GTK_WINDOW(window->window), on_top, &used_net_wm);    if(!used_net_wm)    {        /* XXXRGG: tbd - will we get a _WIN_LAYER property back? */    }}voidhxwindow_set_zoom(HXMainWindow* window, HXMainWindowZoomSize zoom){    if(window->zoom != zoom)    {        if(window->is_fullscreened &&           (zoom == NORMAL_SIZE ||            zoom == DOUBLE_SIZE))        {            window->zoom_on_unfullscreen = zoom;            hxwindow_unfullscreen(window);        }        else        {            window->zoom = zoom;            hxwindow_change_layout(window);            switch(window->zoom)            {                case NORMAL_SIZE:                    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->normal_size_menu_item), TRUE);                    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->double_size_menu_item), FALSE);                    break;                case DOUBLE_SIZE:                    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->normal_size_menu_item), FALSE);                    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->double_size_menu_item), TRUE);                    break;                case CUSTOM_SIZE:                default:                    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->normal_size_menu_item), FALSE);                    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(window->double_size_menu_item), FALSE);                    break;            }        }    }}static voidhxwindow_update_fullscreen(HXMainWindow* window){    /* Update full screen checked menuitem, if necessary */    GtkWidget* fullscreen_menu_item;    fullscreen_menu_item = glade_xml_get_widget(window->xml, "hmw_fullscreen_menu_item");    g_assert(fullscreen_menu_item != NULL);    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(fullscreen_menu_item),                                   window->is_fullscreened);                    if(window->is_fullscreened)    {        window->show_controls_on_unfullscreen = GTK_WIDGET_VISIBLE(window->controls_hbox);        window->show_menu_and_caption_on_unfullscreen = GTK_WIDGET_VISIBLE(window->menu_bar);        window->show_status_bar_on_unfullscreen = GTK_WIDGET_VISIBLE(window->status_bar);        /* Hide the controls */        gtk_widget_hide(GTK_WIDGET(window->menu_bar));        gtk_widget_hide(GTK_WIDGET(window->controls_hbox));        gtk_widget_hide(GTK_WIDGET(window->seek_scale));        gtk_widget_hide(GTK_WIDGET(window->status_bar));        window->zoom_on_unfullscreen = window->zoom;        window->custom_zoom_height_on_unfullscreen = window->custom_zoom_height;        window->custom_zoom_width_on_unfullscreen = window->custom_zoom_width;        window->on_top_on_unfullscreen = window->on_top;        window->on_top = ON_TOP_ALWAYS;        winutils_screensaver_disable();	        hxwindow_on_top(window, TRUE);                        g_assert(window->fullscreen_hide_cursor_timer_enabled == FALSE);        window->fullscreen_hide_cursor_timer_enabled = TRUE;        window->fullscreen_hide_cursor_timer_id =            gtk_timeout_add(HIDE_CURSOR_TIMEOUT * 1000,                            hide_cursor,                            window);        window->player_fullscreen_motion_notify_handler =            g_signal_connect(G_OBJECT(window->window),                             "motion-notify-event",                             G_CALLBACK(handle_motion_in_fullscreened_window),                             window);                window->hxbin_fullscreen_motion_notify_handler =            g_signal_connect(G_OBJECT(window->hxbin),                             "motion-notify-event",                             G_CALLBACK(handle_motion_in_fullscreened_window),                             window);        window->fullscreen_motion_notify_enabled = TRUE;    }    else /* Unfullscreened */    {        /* re-enable the screensaver */        winutils_screensaver_enable();        /* come out of full screen */        switch(window->on_top_on_unfullscreen)        {            case ON_TOP_WHILE_PLAYING:                hxwindow_on_top_while_playing(window);                break;            case ON_TOP_ALWAYS:                hxwindow_on_top_always(window);                break;            case ON_TOP_NEVER:            default:                hxwindow_on_top_never(window);                break;        }        /* Disable the hide-the-cursor-on-fullscreen logic */        if(window->fullscreen_motion_notify_enabled)        {            g_signal_handler_disconnect(G_OBJECT(window->window),                                        window->player_fullscreen_motion_notify_handler);                        g_signal_handler_disconnect(G_OBJECT(window->hxbin),                                        window->hxbin_fullscreen_motion_notify_handler);                        window->fullscreen_motion_notify_enabled = FALSE;        }        show_cursor(window);        /* If the window manager is fd.o compliant, our decorations will           be preserved. The decorations showing/hiding code is only of           interest for legacy wm's where winutils_window_on_top hides           decorations. */        if(window->show_menu_and_caption_on_unfullscreen)        {                        gtk_window_set_decorated(GTK_WINDOW(window->window), TRUE);            gtk_widget_show(GTK_WIDGET(window->menu_bar));        }        else        {            gtk_window_set_decorated(GTK_WINDOW(window->window), FALSE);        }          if(window->show_controls_on_unfullscreen)        {            gtk_widget_show(GTK_WIDGET(window->controls_hbox));            gtk_widget_show(GTK_WIDGET(window->seek_scale));        }                    if(window->show_status_bar_on_unfullscreen)        {            gtk_widget_show(GTK_WIDGET(window->status_bar));        }        hxwindow_set_zoom(window, window->zoom_on_unfullscreen);        window->custom_zoom_height = window->custom_zoom_height_on_unfullscreen;        window->custom_zoom_width = window->custom_zoom_width_on_unfullscreen;    }}voidhxwindow_fullscreen(HXMainWindow* window){    gboolean used_net_wm = FALSE;     if(!window->is_fullscreened)    {        winutils_window_fullscreen(GTK_WINDOW(window->window), &used_net_wm);        if(!used_net_wm)        {            /* We won't get a window_state reply from the wm. */            window->is_fullscreened = TRUE;            hxwindow_update_fullscreen(window);        }    }}voidhxwindow_unfullscreen(HXMainWindow* window){    gboolean used_net_wm = FALSE;    if(window->is_fullscreened)    {        winutils_window_unfullscreen(GTK_WINDOW(window->window), &used_net_wm);        if(!used_net_wm)        {            /* We won't get a window_state reply from the wm. */            window->is_fullscreened = FALSE;            hxwindow_update_fullscreen(window);        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -