using Gtk; class ThemeConfigWindow : ApplicationWindow { Label selectbg_label; Label selectfg_label; ColorButton selectbg_button; ColorButton selectfg_button; ColorButton panelbg_button; ColorButton panelfg_button; ColorButton menubg_button; ColorButton menufg_button; Switch select_switch; Switch panel_switch; Switch menu_switch; Button revert_button; Button apply_button; Gdk.RGBA color_rgb; File config_dir; File home_dir; File gtk3_config_file; File gtk2_config_file; File theme_path; string color_hex; string color_scheme; string selectbg_value; string selectfg_value; string panelbg_value; string panelfg_value; string menubg_value; string menufg_value; internal ThemeConfigWindow (ThemeConfigApp app) { Object (application: app, title: "Tema Yapılandırması"); // Set window properties this.window_position = WindowPosition.CENTER; this.resizable = false; this.border_width = 10; // Set window icon try { this.icon = IconTheme.get_default ().load_icon ("gtk-theme-config", 48, 0); } catch (Error e) { stderr.printf ("Uygulama simgesi yüklenemedi: %s\n", e.message); } // Methods create_widgets (); connect_signals (); } void set_values () { // Set default values selectbg_value = "#398ee7"; selectfg_value = "#eeeeee"; panelbg_value = "#cccccc"; panelfg_value = "#333333"; menubg_value = "#eeeeee"; menufg_value = "#333333"; select_switch.set_active (false); panel_switch.set_active (false); menu_switch.set_active (false); // Read the current values var settings = new GLib.Settings ("org.gnome.desktop.interface"); var color_scheme = settings.get_string ("gtk-color-scheme"); var theme_name = settings.get_string ("gtk-theme"); // Set paths of config files config_dir = File.new_for_path (Environment.get_user_config_dir ()); home_dir = File.new_for_path (Environment.get_home_dir ()); gtk3_config_file = config_dir.get_child ("gtk-3.0").get_child ("gtk.css"); gtk2_config_file = home_dir.get_child (".gtkrc-2.0"); // Create path if doesn't exist if (!gtk3_config_file.get_parent().query_exists ()) { try { gtk3_config_file.get_parent().make_directory_with_parents(null); } catch (Error e) { stderr.printf ("Üst dizin oluşturulamadı: %s\n", e.message); } } // Detect current theme path if (gtk3_config_file.query_exists ()) { theme_path = gtk3_config_file; } else if (home_dir.get_child (".themes/%s/gtk-3.0/gtk-main.css".printf (theme_name)).query_exists ()) { theme_path = home_dir.get_child (".themes/%s/gtk-3.0/gtk-main.css".printf (theme_name)); } else if (home_dir.get_child (".themes/%s/gtk-3.0/gtk.css".printf (theme_name)).query_exists ()) { theme_path = home_dir.get_child (".themes/%s/gtk-3.0/gtk.css".printf (theme_name)); } else if (File.parse_name ("/usr/share/themes/%s/gtk-3.0/gtk-main.css".printf (theme_name)).query_exists ()) { theme_path = File.parse_name ("/usr/share/themes/%s/gtk-3.0/gtk-main.css".printf (theme_name)); } else if (File.parse_name ("/usr/share/themes/%s/gtk-3.0/gtk.css".printf (theme_name)).query_exists ()) { theme_path = File.parse_name ("/usr/share/themes/%s/gtk-3.0/gtk.css".printf (theme_name)); } // Read the current theme file try { var dis = new DataInputStream (theme_path.read ()); string line; while ((line = dis.read_line (null)) != null) { if ("@define-color selected_bg_color" in line) { selectbg_value = line.substring (32, line.length-33); if ("@" in selectbg_value) { selectbg_value = "#398ee7"; } } if ("@define-color selected_fg_color" in line) { selectfg_value = line.substring (32, line.length-33); if ("@" in selectfg_value) { selectfg_value = "#eeeeee"; } } if ("@define-color panel_bg_color" in line) { panelbg_value = line.substring (29, line.length-30); if ("@" in panelbg_value) { panelbg_value = "#cccccc"; } } if ("@define-color panel_fg_color" in line) { panelfg_value = line.substring (29, line.length-30); if ("@" in panelfg_value) { panelfg_value = "#333333"; } } if ("@define-color menu_bg_color" in line) { menubg_value = line.substring (28, line.length-29); if ("@" in menubg_value) { menubg_value = "#eeeeee"; } } if ("@define-color menu_fg_color" in line) { menufg_value = line.substring (28, line.length-29); if ("@" in menufg_value) { menufg_value = "#333333"; } } if ("/* select-on */" in line) { select_switch.set_active (true); } if ("/* panel-on */" in line) { panel_switch.set_active (true); } if ("/* menu-on */" in line) { menu_switch.set_active (true); } } } catch (Error e) { stderr.printf ("Kullanıcı teması okunamadı: %s\n", e.message); } // Read the current color scheme if (";" in color_scheme) { string[] parts = color_scheme.split_set(";"); if ("selected_bg_color:#" in parts[0] && "selected_fg_color:#" in parts[1]) { selectbg_value = parts[0].substring (18, parts[0].length-18); selectfg_value = parts[1].substring (18, parts[1].length-18); select_switch.set_active (true); } } // Set colors Gdk.RGBA color = Gdk.RGBA (); color.parse (selectbg_value); selectbg_button.set_rgba (color); color.parse (selectfg_value); selectfg_button.set_rgba (color); color.parse (panelbg_value); panelbg_button.set_rgba (color); color.parse (panelfg_value); panelfg_button.set_rgba (color); color.parse (menubg_value); menubg_button.set_rgba (color); color.parse (menufg_value); menufg_button.set_rgba (color); apply_button.set_sensitive (false); } void create_widgets () { // Create and setup widgets var select_heading = new Label.with_mnemonic ("_Özel vurgu renkleri"); select_heading.set_use_markup (true); select_heading.set_halign (Align.START); var panel_heading = new Label.with_mnemonic ("_Özel panel renkleri/b>"); panel_heading.set_use_markup (true); panel_heading.set_halign (Align.START); var menu_heading = new Label.with_mnemonic ("_Özel menü renkleri"); menu_heading.set_use_markup (true); menu_heading.set_halign (Align.START); selectbg_label = new Label.with_mnemonic ("_Arka planı vurgulayın"); selectbg_label.set_halign (Align.START); selectfg_label = new Label.with_mnemonic ("_Metni vurgulayın"); selectfg_label.set_halign (Align.START); var panelbg_label = new Label.with_mnemonic ("_Panel arka planı"); panelbg_label.set_halign (Align.START); var panelfg_label = new Label.with_mnemonic ("_Panel metni"); panelfg_label.set_halign (Align.START); var menubg_label = new Label.with_mnemonic ("_Menü arkaplanı"); menubg_label.set_halign (Align.START); var menufg_label = new Label.with_mnemonic ("_Menü Metni"); menufg_label.set_halign (Align.START); selectbg_button = new ColorButton (); selectfg_button = new ColorButton (); panelbg_button = new ColorButton (); panelfg_button = new ColorButton (); menubg_button = new ColorButton (); menufg_button = new ColorButton (); select_switch = new Switch (); select_switch.set_halign (Align.END); panel_switch = new Switch (); panel_switch.set_halign (Align.END); menu_switch = new Switch (); menu_switch.set_halign (Align.END); revert_button = new Button.from_stock(Stock.REVERT_TO_SAVED); apply_button = new Button.from_stock (Stock.APPLY); // Buttons var buttons = new ButtonBox (Orientation.HORIZONTAL); buttons.set_layout (ButtonBoxStyle.EDGE); buttons.add (revert_button); buttons.add (apply_button); // Layout widgets var grid = new Grid (); grid.set_column_homogeneous (true); grid.set_row_homogeneous (true); grid.set_column_spacing (5); grid.set_row_spacing (5); grid.attach (select_heading, 0, 0, 1, 1); grid.attach_next_to (select_switch, select_heading, PositionType.RIGHT, 1, 1); grid.attach (selectbg_label, 0, 1, 1, 1); grid.attach_next_to (selectbg_button, selectbg_label, PositionType.RIGHT, 1, 1); grid.attach (selectfg_label, 0, 2, 1, 1); grid.attach_next_to (selectfg_button, selectfg_label, PositionType.RIGHT, 1, 1); grid.attach (panel_heading, 0, 3, 1, 1); grid.attach_next_to (panel_switch, panel_heading, PositionType.RIGHT, 1, 1); grid.attach (panelbg_label, 0, 4, 1, 1); grid.attach_next_to (panelbg_button, panelbg_label, PositionType.RIGHT, 1, 1); grid.attach (panelfg_label, 0, 5, 1, 1); grid.attach_next_to (panelfg_button, panelfg_label, PositionType.RIGHT, 1, 1); grid.attach (menu_heading, 0, 6, 1, 1); grid.attach_next_to (menu_switch, menu_heading, PositionType.RIGHT, 1, 1); grid.attach (menubg_label, 0, 7, 1, 1); grid.attach_next_to (menubg_button, menubg_label, PositionType.RIGHT, 1, 1); grid.attach (menufg_label, 0, 8, 1, 1); grid.attach_next_to (menufg_button, menufg_label, PositionType.RIGHT, 1, 1); grid.attach (buttons, 0, 9, 2, 1); this.add (grid); set_values (); } void connect_signals () { selectbg_button.color_set.connect (() => { on_selectbg_color_set (); apply_button.set_sensitive (true); }); selectfg_button.color_set.connect (() => { on_selectfg_color_set (); apply_button.set_sensitive (true); }); panelbg_button.color_set.connect (() => { on_panelbg_color_set (); apply_button.set_sensitive (true); }); panelfg_button.color_set.connect (() => { on_panelfg_color_set (); apply_button.set_sensitive (true); }); menubg_button.color_set.connect (() => { on_menubg_color_set (); apply_button.set_sensitive (true); }); menufg_button.color_set.connect (() => { on_menufg_color_set (); apply_button.set_sensitive (true); }); select_switch.notify["active"].connect (() => { apply_button.set_sensitive (true); }); panel_switch.notify["active"].connect (() => { apply_button.set_sensitive (true); }); menu_switch.notify["active"].connect (() => { apply_button.set_sensitive (true); }); revert_button.clicked.connect (() => { on_config_reset (); revert_button.set_sensitive (false); }); apply_button.clicked.connect (() => { on_config_set (); apply_button.set_sensitive (false); revert_button.set_sensitive (true); }); } void rgb_to_hex () { int r = (int)Math.round (color_rgb.red * 255); int g = (int)Math.round (color_rgb.green * 255); int b = (int)Math.round (color_rgb.blue * 255); color_hex = "#%02x%02x%02x".printf (r, g, b); } void on_selectbg_color_set () { color_rgb = selectbg_button.get_rgba (); rgb_to_hex (); selectbg_value = color_hex; } void on_selectfg_color_set () { color_rgb = selectfg_button.get_rgba (); rgb_to_hex (); selectfg_value = color_hex; } void on_panelbg_color_set () { color_rgb = panelbg_button.get_rgba (); rgb_to_hex (); panelbg_value = color_hex; } void on_panelfg_color_set () { color_rgb = panelfg_button.get_rgba (); rgb_to_hex (); panelfg_value = color_hex; } void on_menubg_color_set () { color_rgb = menubg_button.get_rgba (); rgb_to_hex (); menubg_value = color_hex; } void on_menufg_color_set () { color_rgb = menufg_button.get_rgba (); rgb_to_hex (); menufg_value = color_hex; } void on_config_set () { set_color_scheme (); write_config (); notify_change (); } void on_config_reset () { reset_color_scheme (); reset_config (); set_values (); notify_change (); } void set_color_scheme () { // Determine color scheme if (select_switch.get_active()) { color_scheme = "\"selected_bg_color:%s;selected_fg_color:%s;\"".printf (selectbg_value, selectfg_value); } else { color_scheme = "\"\""; } // Set color scheme try { Process.spawn_command_line_sync ("gsettings set org.gnome.desktop.interface gtk-color-scheme %s".printf (color_scheme)); } catch (Error e) { stderr.printf ("Could not set color scheme for gtk3: %s\n", e.message); } try { Process.spawn_command_line_sync ("gconftool-2 -s /desktop/gnome/interface/gtk_color_scheme -t string %s".printf (color_scheme)); } catch (Error e) { stderr.printf ("Could not set color scheme for gtk2: %s\n", e.message); } if (File.parse_name ("/usr/bin/xfconf-query").query_exists ()) { try { Process.spawn_command_line_sync ("xfconf-query -n -c xsettings -p /Gtk/ColorScheme -t string -s %s".printf (color_scheme)); } catch (Error e) { stderr.printf ("Could not set color scheme for xfce: %s\n", e.message); } } } void reset_color_scheme () { try { Process.spawn_command_line_sync ("gsettings reset org.gnome.desktop.interface gtk-color-scheme"); } catch (Error e) { stderr.printf ("CGtk3 için renk düzenini sıfırlayamadı: %s\n", e.message); } try { Process.spawn_command_line_sync ("gconftool-2 -u /desktop/gnome/interface/gtk_color_scheme"); } catch (Error e) { stderr.printf ("Gtk2 için renk düzenini sıfırlayamadı: %s\n", e.message); } if (File.parse_name ("/usr/bin/xfconf-query").query_exists ()) { try { Process.spawn_command_line_sync ("xfconf-query -c xsettings -p /Gtk/ColorScheme -r"); } catch (Error e) { stderr.printf ("Cxfce için renk düzenini sıfırlayamadı: %s\n", e.message); } } } void reset_config () { try { if (gtk3_config_file.query_exists ()) { gtk3_config_file.delete (); } } catch (Error e) { stderr.printf ("Önceki gtk3 yapılandırması silinemiyor: %s\n", e.message); } try { if (gtk2_config_file.query_exists ()) { gtk2_config_file.delete (); } } catch (Error e) { stderr.printf ("Önceki gtk2 yapılandırması silinemiyor: %s\n", e.message); } } void write_config () { // Determine states string select_state1; string select_state2; string panel_state1; string panel_state2; string menu_state1; string menu_state2; string panel_gtk2; string menu_gtk2; if (select_switch.get_active()) { select_state1 = "/* select-on */"; select_state2 = "/* select-on */"; } else { select_state1 = "/* select-off"; select_state2 = "select-off */"; } if (panel_switch.get_active()) { panel_state1 = "/* panel-on */"; panel_state2 = "/* panel-on */"; panel_gtk2 = ("style \"gtk-theme-config-panel\" {\n" + "\tbg[NORMAL] = \"%s\"\n" + "\tbg[PRELIGHT] = shade(1.1,\"%s\")\n" + "\tbg[ACTIVE] = shade(0.9,\"%s\")\n" + "\tbg[SELECTED] = shade(0.97,\"%s\")\n" + "\tfg[NORMAL] = \"%s\"\n" + "\tfg[PRELIGHT] = \"%s\"\n" + "\tfg[SELECTED] = \"%s\"\n" + "\tfg[ACTIVE] = \"%s\"\n" + "}\n\n" + "widget \"*PanelWidget*\" style \"gtk-theme-config-panel\"\n" + "widget \"*PanelApplet*\" style \"gtk-theme-config-panel\"\n" + "widget \"*fast-user-switch*\" style \"gtk-theme-config-panel\"\n" + "widget \"*CPUFreq*Applet*\" style \"gtk-theme-config-panel\"\n" + "widget \"*indicator-applet*\" style \"gtk-theme-config-panel\"\n" + "class \"PanelApp*\" style \"gtk-theme-config-panel\"\n" + "class \"PanelToplevel*\" style \"gtk-theme-config-panel\"\n" + "widget_class \"*PanelToplevel*\" style \"gtk-theme-config-panel\"\n" + "widget_class \"*notif*\" style \"gtk-theme-config-panel\"\n" + "widget_class \"*Notif*\" style \"gtk-theme-config-panel\"\n" + "widget_class \"*Tray*\" style \"gtk-theme-config-panel\" \n" + "widget_class \"*tray*\" style \"gtk-theme-config-panel\"\n" + "widget_class \"*computertemp*\" style \"gtk-theme-config-panel\"\n" + "widget_class \"*Applet*Tomboy*\" style \"gtk-theme-config-panel\"\n" + "widget_class \"*Applet*Netstatus*\" style \"gtk-theme-config-panel\"\n" + "widget \"*gdm-user-switch-menubar*\" style \"gtk-theme-config-panel\"\n" + "widget \"*Xfce*Panel*\" style \"gtk-theme-config-panel\"\n" + "class \"*Xfce*Panel*\" style \"gtk-theme-config-panel\"\n").printf (panelbg_value, panelbg_value, panelbg_value, panelbg_value, panelfg_value, panelfg_value, panelfg_value, panelfg_value); } else { panel_state1 = "/* panel-off"; panel_state2 = "panel-off */"; panel_gtk2 = ""; } if (menu_switch.get_active()) { menu_state1 = "/* menu-on */"; menu_state2 = "/* menu-on */"; menu_gtk2 = ("style \"gtk-theme-config-menu\" {\n" + "\tbase[NORMAL] = \"%s\"\n" + "\tbg[NORMAL] = \"%s\"\n" + "\tbg[ACTIVE] = \"%s\"\n" + "\tbg[INSENSITIVE] = \"%s\"\n" + "\ttext[NORMAL] = \"%s\"\n" + "\tfg[NORMAL] = \"%s\"\n" + "}\n\n" + "widget_class\"**\"style\"gtk-theme-config-menu\"\n").printf (menubg_value, menubg_value, menubg_value, menubg_value, menufg_value, menufg_value); } else { menu_state1 = "/* menu-off"; menu_state2 = "menu-off */";; menu_gtk2 = ""; } // Write config try { var dos = new DataOutputStream (gtk3_config_file.replace (null, false, FileCreateFlags.REPLACE_DESTINATION)); dos.put_string ("/* Custom styles */\n\n"); string text = ("%s\n" + "@define-color selected_bg_color %s;\n" + "@define-color selected_fg_color %s;\n" + "@define-color theme_selected_bg_color @selected_bg_color;\n" + "@define-color theme_selected_fg_color @selected_fg_color;\n" + "%s\n\n" + "%s\n" + "@define-color panel_bg_color %s;\n" + "@define-color panel_fg_color %s;\n\n" + "PanelWidget,\n" + "PanelApplet,\n" + "PanelToplevel,\n" + "PanelSeparator,\n" + "PanelApplet > GtkMenuBar.menubar,\n" + "PanelApplet > GtkMenuBar.menubar.menuitem,\n" + "PanelMenuBar.menubar,\n" + "PanelMenuBar.menubar.menuitem,\n" + "PanelAppletFrame,\n" + "UnityPanelWidget,\n" + ".gnome-panel-menu-bar,\n" + ".unity-panel {\n" + "\tbackground-image: -gtk-gradient(linear,left top,left bottom,from(shade(@panel_bg_color,1.2)),to(shade(@panel_bg_color,0.8)));\n" + "\tcolor: @panel_fg_color;\n" + "}\n\n" + ".unity-panel.menuitem,\n" + ".unity-panel .menuitem {\n" + "\tcolor: @panel_fg_color;\n" + "}\n\n" + ".unity-panel.menubar.menuitem:hover,\n" + ".unity-panel.menubar .menuitem *:hover {\n" + "\tborder-color: shade(@panel_bg_color, 0.7);\n" + "\tborder-image: none;\n" + "\tbackground-image: -gtk-gradient(linear,left top,left bottom,from(shade(@panel_bg_color, 0.97)),to(shade(@panel_bg_color, 0.82)));\n" + "\tcolor: @panel_fg_color;\n" + "}\n\n" + "PanelApplet .button {\n" + "\tborder-color: transparent;\n" + "\tborder-image: none;\n" + "\tbackground-image: -gtk-gradient(linear,left top,left bottom,from(shade(@panel_bg_color,1.2)),to(shade(@panel_bg_color,0.8)));\n" + "\tcolor: @panel_fg_color;\n" + "\tbox-shadow: none;\n" + "\ttext-shadow: none;\n" + "\t-unico-inner-stroke-width: 0;\n" + "}\n\n" + "PanelApplet .button:active {\n" + "\tborder-color: shade(@panel_bg_color,0.8);\n" + "\tborder-image: none;\n" + "\tbackground-image: -gtk-gradient(linear,left top,left bottom,from(shade(shade(@panel_bg_color,1.02),0.9)),to(shade(shade(@panel_bg_color,1.02),0.95)));\n" + "\tcolor: @panel_fg_color;\n" + "\tbox-shadow: none;\n" + "\ttext-shadow: none;\n" + "\t-unico-inner-stroke-width: 0;\n" + "}\n\n" + "PanelApplet .button:prelight {\n" + "\tborder-color: transparent;\n" + "\tborder-image: none;\n" + "\tbackground-image: -gtk-gradient(linear,left top,left bottom,from(shade(@panel_bg_color,1.2)),to(shade(@panel_bg_color,1.0)));\n" + "\tcolor: @panel_fg_color;\n" + "\tbox-shadow: none;\n" + "\ttext-shadow: none;\n" + "\t-unico-inner-stroke-width: 0;\n" + "}\n\n" + "PanelApplet .button:active:prelight {\n" + "\tborder-color: shade(@panel_bg_color,0.8);\n" + "\tborder-image: none;\n" + "\tbackground-image: -gtk-gradient(linear,left top,left bottom,from(shade(shade(@panel_bg_color,1.02),1.0)),to(shade(shade(@panel_bg_color,1.02),1.05)));\n" + "\tcolor: @panel_fg_color;\n" + "\tbox-shadow: none;\n" + "\ttext-shadow: none;\n" + "\t-unico-inner-stroke-width: 0;\n" + "}\n\n" + "WnckPager,\n" + "WnckTasklist {\n" + "\tbackground-color: @panel_bg_color;\n" + "}\n\n" + "%s\n\n" + "%s\n" + "@define-color menu_bg_color %s;\n" + "@define-color menu_fg_color %s;\n\n" + "GtkTreeMenu.menu,\n" + "GtkMenuToolButton.menu,\n" + "GtkComboBox .menu {\n" + "\tbackground-color: @menu_bg_color;\n" + "}\n\n" + ".primary-toolbar .button .menu,\n" + ".toolbar .menu,\n" + ".toolbar .primary-toolbar .menu,\n" + ".menu {\n" + "\tborder-style: none;\n" + "\tbackground-image: none;\n" + "\tbackground-color: @menu_bg_color;\n" + "\tcolor: @menu_fg_color;\n" + "\tbox-shadow: none;\n" + "\ttext-shadow: none;\n" + "\t-unico-inner-stroke-width: 0;\n" + "}\n\n" + ".menu.button:hover,\n" + ".menu.button:active,\n" + ".menu.button:active:insensitive,\n" + ".menu.button:insensitive,\n" + ".menu.button {\n" + "\tbackground-color: @menu_bg_color;\n" + "\tbackground-image: none;\n" + "}\n\n" + "GtkTreeMenu .menuitem * {\n" + "\tcolor: @menu_fg_color;\n" + "}\n\n" + ".menuitem,\n" + ".menu .menuitem {\n" + "\tbackground-color: transparent;\n" + "}\n\n" + ".menu .menuitem:active,\n" + ".menu .menuitem:hover {\n" + "\tbackground-color: @theme_selected_bg_color;\n" + "}\n\n" + ".menuitem.check,\n" + ".menuitem.radio,\n" + ".menuitem.check:hover,\n" + ".menuitem.radio:hover,\n" + ".menuitem.check:active,\n" + ".menuitem.radio:active {\n" + "\tbackground-color: transparent;\n" + "}\n\n" + ".menu .menuitem:insensitive,\n" + ".menu .menuitem *:insensitive {\n" + "\tcolor: mix(@menu_fg_color,@menu_bg_color,0.5);\n" + "}\n\n" + ".menuitem.arrow {\n" + "\tcolor: alpha(@menu_fg_color, 0.6);\n" + "}\n\n" + ".menuitem .entry {\n" + "\tborder-color: shade(@menu_bg_color,0.7);\n" + "\tborder-image: none;\n" + "\tbackground-color: @menu_bg_color;\n" + "\tbackground-image: none;\n" + "\tcolor: @menu_fg_color;\n" + "}\n\n" + ".menuitem .accelerator {\n" + "\tcolor: alpha(@menu_fg_color,0.6);\n" + "}\n\n" + ".menuitem .accelerator:insensitive {\n" + "\tcolor: alpha(mix(@menu_fg_color,@menu_bg_color,0.5),0.6);\n" + "\ttext-shadow: none;\n" + "}\n\n" + ".menuitem.separator {\n" + "\tbackground-color: transparent;\n" + "\tcolor: shade(@menu_bg_color, 0.9);\n" + "}\n\n" + ".menuitem GtkCalendar,\n" + ".menuitem GtkCalendar.button,\n" + ".menuitem GtkCalendar.header,\n" + ".menuitem GtkCalendar.view {\n" + "\tborder-color: shade(@menu_bg_color,0.8);\n" + "\tborder-image: none;\n" + "\tbackground-color: @menu_bg_color;\n" + "\tbackground-image: none;\n" + "\tcolor: @menu_fg_color;\n" + "}\n\n" + ".menuitem GtkCalendar:inconsistent {\n" + "\tcolor: mix(@menu_fg_color,@menu_bg_color,0.5);\n" + "}\n\n" + "%s\n").printf (select_state1, selectbg_value, selectfg_value, select_state2, panel_state1, panelbg_value, panelfg_value, panel_state2, menu_state1, menubg_value, menufg_value, menu_state2); uint8[] data = text.data; long written = 0; while (written < data.length) { written += dos.write (data[written:data.length]); } } catch (Error e) { stderr.printf ("Gtk3 yapılandırması yazılamadı: %s\n", e.message); } try { var dos = new DataOutputStream (gtk2_config_file.replace (null, false, FileCreateFlags.REPLACE_DESTINATION)); dos.put_string ("# Custom styles\n\n"); string text = "%s\n%s".printf(panel_gtk2, menu_gtk2); uint8[] data = text.data; long written = 0; while (written < data.length) { written += dos.write (data[written:data.length]); } } catch (Error e) { stderr.printf ("Gtk2 yapılandırması yazılamadı: %s\n", e.message); } } void notify_change() { try { Process.spawn_command_line_async("notify-send -h int:transient:1 -i \"gtk-theme-config\" \"Changes applied.\" \"You might need to restart running applications.\""); } catch (Error e) { stderr.printf ("Bildirim görüntülenemiyor: %s\n", e.message); } } } class ThemeConfigApp : Gtk.Application { internal ThemeConfigApp () { Object (application_id: "org.themeconfig.app"); } protected override void activate () { var window = new ThemeConfigWindow (this); window.show_all (); } } int main (string[] args) { return new ThemeConfigApp ().run (args); }