/* * Application * * Copyright (C) 2017 Patrick McDermott * * This file is part of Marquee. * * Marquee is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Marquee is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Marquee. If not, see . */ #include #include #include #include "application.h" #include "about.h" #include "window.h" MqApplication * mq_application_new(gchar __attribute__((unused)) *profile, gboolean __attribute__((unused)) private) { MqApplication *application; WebKitWebContext *web_context; application = malloc(sizeof(*application)); application->windows = NULL; web_context = webkit_web_context_get_default(); webkit_web_context_set_favicon_database_directory(web_context, NULL); webkit_web_context_set_process_model(web_context, WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES); webkit_web_context_register_uri_scheme(web_context, "mq-about", (WebKitURISchemeRequestCallback) mq_about_request, application, NULL); return application; } int mq_application_main(MqApplication __attribute__((unused)) *application) { gtk_main(); return EXIT_SUCCESS; } MqWindow * mq_application_add_window(MqApplication *application, const gchar **uris) { MqWindow *window; window = mq_window_new(application, uris); application->windows = g_list_prepend(application->windows, window); return window; } void mq_application_delete_window(MqApplication *application, MqWindow *window) { application->windows = g_list_remove(application->windows, window); if (!application->windows) { gtk_main_quit(); } } static gboolean scroll_tab_labels(MqApplication *application) { GList *item; if (application->marquee_mode) { for (item = application->windows; item; item = item->next) { mq_window_scroll_tab_labels(item->data); } return G_SOURCE_CONTINUE; } else { return G_SOURCE_REMOVE; } } void mq_application_marquee_mode_activate(MqApplication *application) { GList *item; for (item = application->windows; item; item = item->next) { mq_window_begin_scrolling_tab_labels(item->data); } application->marquee_mode = TRUE; g_timeout_add(125, (GSourceFunc) scroll_tab_labels, application); } void mq_application_marquee_mode_deactivate(MqApplication *application) { GList *item; for (item = application->windows; item; item = item->next) { mq_window_end_scrolling_tab_labels(item->data); } application->marquee_mode = FALSE; } gboolean mq_application_marquee_mode_on(MqApplication *application) { return application->marquee_mode; }