File indexing completed on 2024-04-21 05:26:53

0001 /* 
0002  * SPDX-FileCopyrightText: 2011 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
0003  * 
0004  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  * 
0006  * #include <gtk/gtk.h>
0007  */
0008 
0009 #include <gtk/gtkx.h>
0010 #include <stdio.h>
0011 #include <assert.h>
0012 #include <stdlib.h>
0013 #include <string.h>
0014 
0015 void printHelp()
0016 {
0017     printf(
0018         "Small utility for previewing Gtk3 theme.\n"
0019         "\n"
0020         "Using:\n"
0021         "gtk3_preview <args>\n"
0022         "\n"
0023         "Arguments:\n"
0024         "  -h, --help\tShows this help\n"
0025         "  -V, --version\tPrints the program version\n"
0026         "  <winid>\t Creates a window that can be embedded using XEmbed\n"
0027     );
0028 }
0029 
0030 static void on_dlg_response(GtkDialog* dlg, int res, gpointer user_data)
0031 {
0032     switch(res)
0033     {
0034     default:
0035         gtk_main_quit();
0036     }
0037 }
0038 
0039 int main(int argc, char **argv)
0040 {
0041     GError     *error = NULL;
0042     unsigned long wid=0;
0043     gtk_init( &argc, &argv );
0044     int i;
0045     for(i=0; i<argc; i++) {
0046         if(strcmp("-h", argv[i])==0 || strcmp("--help", argv[i])==0) {
0047             printHelp();
0048             return 0;
0049         }
0050         else if(strcmp("-V", argv[i])==0 || strcmp("--version", argv[i])==0) {
0051             printf("gtk3_preview version 1.0\n");
0052             return 0;
0053         } else if(argc>1)
0054             sscanf(argv[1], "%ld", &wid);
0055     }
0056     
0057     const char* ui_file = DATA_DIR "/preview.ui";
0058  
0059     GtkBuilder *builder = gtk_builder_new();
0060     if( ! gtk_builder_add_from_file( builder, ui_file, &error ) ) {
0061         g_warning( "%s", error->message );
0062         g_free( error );
0063         return 1;
0064     }
0065     
0066     GtkWidget *previewUI = GTK_WIDGET( gtk_builder_get_object( builder, "frame1" ) );
0067     gtk_builder_connect_signals( builder, NULL );
0068     
0069     /* a plug when embedded, a window when a window */
0070     GtkWidget* window;
0071     
0072     if(wid==0) {
0073         window = gtk_dialog_new();
0074         gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area(GTK_DIALOG(window))), previewUI);
0075         g_signal_connect(window, "response", G_CALLBACK(on_dlg_response), NULL);
0076     } else {
0077         window = gtk_plug_new(wid);
0078         gtk_container_add (GTK_CONTAINER (window), previewUI);
0079     }
0080     
0081     g_signal_connect (window, "destroy",
0082                     G_CALLBACK (gtk_widget_destroyed),
0083                     &window);
0084     
0085     gtk_widget_show_all ( window );
0086     g_object_unref( G_OBJECT( builder ) );
0087     
0088     if(wid)
0089         fprintf(stderr, "--- is embedded gtk3: %d\n", gtk_plug_get_embedded(GTK_PLUG(window)));
0090     
0091     gtk_main();
0092     
0093     return 0;
0094 }