174 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* PIKA - Photo and Image Kooker Application
 | |
|  * a rebranding of The GNU Image Manipulation Program (created with heckimp)
 | |
|  * A derived work which may be trivial. However, any changes may be (C)2023 by Aldercone Studio
 | |
|  *
 | |
|  * Original copyright, applying to most contents (license remains unchanged): 
 | |
|  * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
 | |
|  *
 | |
|  * pikaapp.c
 | |
|  * Copyright (C) 2021 Niels De Graef <nielsdegraef@gmail.com>
 | |
|  *
 | |
|  * This library 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
 | |
|  * Library General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with this library.  If not, see
 | |
|  * <https://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #include <config.h>
 | |
| 
 | |
| #include <gtk/gtk.h>
 | |
| 
 | |
| #include "libpikabase/pikabase.h"
 | |
| 
 | |
| #include "core/core-types.h"
 | |
| 
 | |
| #include "core/pika.h"
 | |
| 
 | |
| #include "pikacoreapp.h"
 | |
| 
 | |
| #include "pikaapp.h"
 | |
| 
 | |
| 
 | |
| enum
 | |
| {
 | |
|   PROP_0,
 | |
|   PROP_NO_SPLASH = PIKA_CORE_APP_PROP_LAST + 1,
 | |
| };
 | |
| 
 | |
| struct _PikaApp
 | |
| {
 | |
|   GtkApplication parent_instance;
 | |
| 
 | |
|   gboolean       no_splash;
 | |
| };
 | |
| 
 | |
| 
 | |
| static void pika_app_get_property (GObject      *object,
 | |
|                                    guint         property_id,
 | |
|                                    GValue       *value,
 | |
|                                    GParamSpec   *pspec);
 | |
| static void pika_app_set_property (GObject      *object,
 | |
|                                    guint         property_id,
 | |
|                                    const GValue *value,
 | |
|                                    GParamSpec   *pspec);
 | |
| 
 | |
| 
 | |
| G_DEFINE_TYPE_WITH_CODE (PikaApp, pika_app, GTK_TYPE_APPLICATION,
 | |
|                          G_IMPLEMENT_INTERFACE (PIKA_TYPE_CORE_APP,
 | |
|                                                 NULL))
 | |
| 
 | |
| 
 | |
| static void
 | |
| pika_app_class_init (PikaAppClass *klass)
 | |
| {
 | |
|   GObjectClass *gobj_class = G_OBJECT_CLASS (klass);
 | |
| 
 | |
|   gobj_class->get_property = pika_app_get_property;
 | |
|   gobj_class->set_property = pika_app_set_property;
 | |
| 
 | |
|   pika_core_app_install_properties (gobj_class);
 | |
| 
 | |
|   g_object_class_install_property (gobj_class, PROP_NO_SPLASH,
 | |
|                                    g_param_spec_boolean ("no-splash", NULL, NULL,
 | |
|                                                          FALSE,
 | |
|                                                          PIKA_PARAM_READWRITE |
 | |
|                                                          G_PARAM_CONSTRUCT_ONLY));
 | |
| }
 | |
| 
 | |
| static void
 | |
| pika_app_init (PikaApp *self)
 | |
| {
 | |
| }
 | |
| 
 | |
| static void
 | |
| pika_app_get_property (GObject    *object,
 | |
|                        guint       property_id,
 | |
|                        GValue     *value,
 | |
|                        GParamSpec *pspec)
 | |
| {
 | |
|   switch (property_id)
 | |
|     {
 | |
|     case PROP_NO_SPLASH:
 | |
|       g_value_set_boolean (value, PIKA_APP (object)->no_splash);
 | |
|       break;
 | |
| 
 | |
|     default:
 | |
|       pika_core_app_get_property (object, property_id, value, pspec);
 | |
|       break;
 | |
|     }
 | |
| }
 | |
| 
 | |
| static void
 | |
| pika_app_set_property (GObject      *object,
 | |
|                        guint         property_id,
 | |
|                        const GValue *value,
 | |
|                        GParamSpec   *pspec)
 | |
| {
 | |
|   switch (property_id)
 | |
|     {
 | |
|     case PROP_NO_SPLASH:
 | |
|       PIKA_APP (object)->no_splash = g_value_get_boolean (value);
 | |
|       break;
 | |
| 
 | |
|     default:
 | |
|       pika_core_app_set_property (object, property_id, value, pspec);
 | |
|       break;
 | |
|     }
 | |
| }
 | |
| 
 | |
| /*  public functions  */
 | |
| 
 | |
| GApplication *
 | |
| pika_app_new (Pika        *pika,
 | |
|               gboolean     no_splash,
 | |
|               gboolean     quit,
 | |
|               gboolean     as_new,
 | |
|               const char **filenames,
 | |
|               const char  *batch_interpreter,
 | |
|               const char **batch_commands)
 | |
| {
 | |
|   PikaApp *app;
 | |
| 
 | |
|   app = g_object_new (PIKA_TYPE_APP,
 | |
|                       "application-id",    PIKA_APPLICATION_ID,
 | |
|                       /* We have our own code to handle process uniqueness, so
 | |
|                        * when we reached this code, we are already passed this
 | |
|                        * (it means that either this is the first process, or we
 | |
|                        * don't want uniqueness). See bugs #9598 and #9599 for
 | |
|                        * what happens when we let GIO try to handle uniqueness.
 | |
|                        *
 | |
|                        * TODO: since GApplication has code to pass over files
 | |
|                        * and command line arguments, we may eventually want to
 | |
|                        * remove our own code for uniqueness and batch command
 | |
|                        * inter-process communication. This should be tested.
 | |
|                        */
 | |
| #if GLIB_CHECK_VERSION(2,74,0)
 | |
|                       "flags",             G_APPLICATION_DEFAULT_FLAGS | G_APPLICATION_NON_UNIQUE,
 | |
| #else
 | |
|                       "flags",             G_APPLICATION_FLAGS_NONE | G_APPLICATION_NON_UNIQUE,
 | |
| #endif
 | |
|                       "pika",              pika,
 | |
|                       "filenames",         filenames,
 | |
|                       "as-new",            as_new,
 | |
| 
 | |
|                       "quit",              quit,
 | |
|                       "batch-interpreter", batch_interpreter,
 | |
|                       "batch-commands",    batch_commands,
 | |
| 
 | |
|                       "no-splash",         no_splash,
 | |
|                       NULL);
 | |
| 
 | |
|   return G_APPLICATION (app);
 | |
| }
 | |
| 
 | |
| gboolean
 | |
| pika_app_get_no_splash (PikaApp *self)
 | |
| {
 | |
|   g_return_val_if_fail (PIKA_IS_APP (self), FALSE);
 | |
|   return PIKA_APP (self)->no_splash;
 | |
| }
 |