File indexing completed on 2025-01-12 13:28:40
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 }