From 9c1da645b0584601096320a43657cd560c471eb2 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Sun, 11 Nov 2012 19:26:23 -0600 Subject: Work around GTK crash on startup --- tdegtk/tdegtk-theme.cpp | 259 ++++++++++++++++++++++++------------------------ 1 file changed, 128 insertions(+), 131 deletions(-) (limited to 'tdegtk/tdegtk-theme.cpp') diff --git a/tdegtk/tdegtk-theme.cpp b/tdegtk/tdegtk-theme.cpp index 9208ec2..e214844 100644 --- a/tdegtk/tdegtk-theme.cpp +++ b/tdegtk/tdegtk-theme.cpp @@ -142,12 +142,15 @@ G_MODULE_EXPORT GtkThemingEngine* create_engine(void) { icon_sizes.push_back(std::make_pair("gtk-dialog", IconSize(KIcon::Small))); icon_sizes.push_back(std::make_pair("", IconSize(KIcon::Small))); - if (gtk3TQtDebug) { + // FIXME + // GTK3 crashes if false is passed to writeGtkThemeControlFile + // Figure out why! +// if (gtk3TQtDebug) { writeGtkThemeControlFile(true); - } - else { - writeGtkThemeControlFile(false); - } +// } +// else { +// writeGtkThemeControlFile(false); +// } // Initialize hooks m_widgetLookup.initializeHooks(); @@ -507,6 +510,122 @@ void writeGtkThemeControlFile(int forceRecreate) { } } + // Set up icons + // Build the list of icon theme directories. + // This function is recursive - it gets the directories of all the inherited themes as well + addIconThemeDir(iconTheme); + + if (!iconThemeDirs.isEmpty()) { + GtkIconFactory* factory; + factory = gtk_icon_factory_new(); + + doIconMapping("gtk-about", "actions/about_kde.png", factory, iconThemeDirs); + doIconMapping("gtk-add", "actions/add.png", factory, iconThemeDirs); + doIconMapping("gtk-apply", "actions/apply.png", factory, iconThemeDirs); + doIconMapping("gtk-bold", "actions/text_bold.png", factory, iconThemeDirs); + doIconMapping("gtk-cancel", "actions/button_cancel.png", factory, iconThemeDirs); + doIconMapping("gtk-cdrom", "devices/cdrom_unmount.png", factory, iconThemeDirs); + doIconMapping("gtk-clear", "actions/editclear.png", factory, iconThemeDirs); + doIconMapping("gtk-close", "actions/fileclose.png", factory, iconThemeDirs); + doIconMapping("gtk-color-picker", "actions/colorpicker.png", factory, iconThemeDirs); + doIconMapping("gtk-copy", "actions/editcopy.png", factory, iconThemeDirs); + doIconMapping("gtk-convert", "actions/gtk-convert.png", factory, iconThemeDirs); + doIconMapping("gtk-connect", "actions/connect_creating.png", factory, iconThemeDirs); + doIconMapping("gtk-cut", "actions/editcut.png", factory, iconThemeDirs); + doIconMapping("gtk-delete", "actions/editdelete.png", factory, iconThemeDirs); + doIconMapping("gtk-dialog-authentication", "status/gtk-dialog-authentication", factory, iconThemeDirs); + doIconMapping("gtk-dialog-error", "actions/messagebox_critical.png", factory, iconThemeDirs); + doIconMapping("gtk-dialog-info", "actions/messagebox_info.png", factory, iconThemeDirs); + doIconMapping("gtk-dialog-question", "actions/help.png", factory, iconThemeDirs); + doIconMapping("gtk-dialog-warning", "actions/messagebox_warning.png", factory, iconThemeDirs); + doIconMapping("gtk-directory", "filesystems/folder.png", factory, iconThemeDirs); + doIconMapping("gtk-disconnect", "actions/connect_no.png", factory, iconThemeDirs); + doIconMapping("gtk-dnd", "mimetypes/empty.png", factory, iconThemeDirs); + doIconMapping("gtk-dnd-multiple", "mimetypes/kmultiple.png", factory, iconThemeDirs); + doIconMapping("gtk-edit", "actions/edit.png", factory, iconThemeDirs); //2.6 + doIconMapping("gtk-execute", "actions/exec.png", factory, iconThemeDirs); + doIconMapping("gtk-file", "mimetypes/empty.png", factory, iconThemeDirs); + doIconMapping("gtk-find", "actions/find.png", factory, iconThemeDirs); + doIconMapping("gtk-find-and-replace", "actions/find.png", factory, iconThemeDirs); // Is there a TDE "find and replace" icon? FIXME + doIconMapping("gtk-floppy", "devices/3floppy_unmount.png", factory, iconThemeDirs); + doIconMapping("gtk-fullscreen", "actions/window-fullscreen.png", factory, iconThemeDirs); + doIconMapping("gtk-goto-bottom", "actions/bottom.png", factory, iconThemeDirs); + doIconMapping("gtk-goto-first", "actions/start.png", factory, iconThemeDirs); + doIconMapping("gtk-goto-last", "actions/finish.png", factory, iconThemeDirs); + doIconMapping("gtk-goto-top", "actions/top.png", factory, iconThemeDirs); + doIconMapping("gtk-go-back", "actions/back.png", factory, iconThemeDirs); + doIconMapping("gtk-go-down", "actions/down.png", factory, iconThemeDirs); + doIconMapping("gtk-go-forward", "actions/forward.png", factory, iconThemeDirs); + doIconMapping("gtk-go-up", "actions/up.png", factory, iconThemeDirs); + doIconMapping("gtk-harddisk", "devices/hdd_unmount.png", factory, iconThemeDirs); + doIconMapping("gtk-help", "apps/khelpcenter.png", factory, iconThemeDirs); + doIconMapping("gtk-home", "filesystems/folder_home.png", factory, iconThemeDirs); + doIconMapping("gtk-indent", "actions/indent.png", factory, iconThemeDirs); + doIconMapping("gtk-index", "actions/contents.png", factory, iconThemeDirs); + doIconMapping("gtk-info", "actions/messagebox_info.png", factory, iconThemeDirs); + doIconMapping("gtk-italic", "actions/text_italic.png", factory, iconThemeDirs); + doIconMapping("gtk-jump-to", "actions/goto.png", factory, iconThemeDirs); + doIconMapping("gtk-justify-center", "actions/text_center.png", factory, iconThemeDirs); + doIconMapping("gtk-justify-fill", "actions/text_block.png", factory, iconThemeDirs); + doIconMapping("gtk-justify-left", "actions/text_left.png", factory, iconThemeDirs); + doIconMapping("gtk-justify-right", "actions/text_right.png", factory, iconThemeDirs); + doIconMapping("gtk-leave-fullscreen", "actions/window-nofullscreen.png", factory, iconThemeDirs); + doIconMapping("gtk-media-forward", "player-fwd.png", factory, iconThemeDirs); + doIconMapping("gtk-media-next", "actions/player-end.png", factory, iconThemeDirs); + doIconMapping("gtk-media-pause", "actions/player-pause.png", factory, iconThemeDirs); + doIconMapping("gtk-media-previous", "actions/player-start.png", factory, iconThemeDirs); + doIconMapping("gtk-media-record", "actions/gtk-media-record.png", factory, iconThemeDirs); // FIXME + doIconMapping("gtk-media-rewind", "actions/player-rew.png", factory, iconThemeDirs); + doIconMapping("gtk-media-stop", "actions/player-stop.png", factory, iconThemeDirs); + doIconMapping("gtk-missing-image", "mimetypes/unknown.png", factory, iconThemeDirs); + doIconMapping("gtk-network", "filesystems/network.png", factory, iconThemeDirs); + doIconMapping("gtk-new", "actions/filenew.png", factory, iconThemeDirs); + doIconMapping("gtk-no", "actions/gtk-no.png", factory, iconThemeDirs); + doIconMapping("gtk-ok", "actions/button_ok.png", factory, iconThemeDirs); + doIconMapping("gtk-open", "actions/fileopen.png", factory, iconThemeDirs); + //doIconMapping("gtk-orientation-landscape", factory, iconThemeDirs); // FIXME + //doIconMapping("gtk-orientation-portrait", factory, iconThemeDirs); // FIXME + //doIconMapping("gtk-orientation-reverse-landscape", factory, iconThemeDirs); // FIXME + //doIconMapping("gtk-orientation-reverse-portrait"", factory, iconThemeDirs); // FIXME + doIconMapping("gtk-paste", "actions/editpaste.png", factory, iconThemeDirs); + doIconMapping("gtk-preferences", "actions/configure.png", factory, iconThemeDirs); + doIconMapping("gtk-print", "actions/fileprint.png", factory, iconThemeDirs); + doIconMapping("gtk-print-preview", "actions/filequickprint.png", factory, iconThemeDirs); + doIconMapping("gtk-properties", "actions/configure.png", factory, iconThemeDirs); + doIconMapping("gtk-quit", "actions/exit.png", factory, iconThemeDirs); + doIconMapping("gtk-redo", "actions/redo.png", factory, iconThemeDirs); + doIconMapping("gtk-refresh", "actions/reload.png", factory, iconThemeDirs); + doIconMapping("gtk-remove", "actions/remove.png", factory, iconThemeDirs); + doIconMapping("gtk-revert-to-saved", "actions/revert.png", factory, iconThemeDirs); + doIconMapping("gtk-save", "actions/filesave.png", factory, iconThemeDirs); + doIconMapping("gtk-save-as", "actions/filesaveas.png", factory, iconThemeDirs); + doIconMapping("gtk-select-all", "actions/gtk-select-all.png", factory, iconThemeDirs); // FIXME + doIconMapping("gtk-select-color", "actions/colorize.png", factory, iconThemeDirs); + doIconMapping("gtk-select-font", "mimetypes/font.png", factory, iconThemeDirs); + //doIconMapping("gtk-sort-ascending", "??", factory, iconThemeDirs); // FIXME + //doIconMapping("gtk-sort-descending", "??", factory, iconThemeDirs); // FIXME + doIconMapping("gtk-spell-check", "actions/spellcheck.png", factory, iconThemeDirs); + doIconMapping("gtk-stop", "actions/stop.png", factory, iconThemeDirs); + doIconMapping("gtk-strikethrough", "actions/text_strike.png", factory, iconThemeDirs); + doIconMapping("gtk-undelete", "actions/gtk-undelete.png", factory, iconThemeDirs); // FIXME + doIconMapping("gtk-underline", "actions/text_under.png", factory, iconThemeDirs); + doIconMapping("gtk-undo", "actions/undo.png", factory, iconThemeDirs); + doIconMapping("gtk-unindent", "actions/unindent.png", factory, iconThemeDirs); + doIconMapping("gtk-yes", "actions/button_ok.png", factory, iconThemeDirs); // Verify mapping here + doIconMapping("gtk-zoom-100", "actions/viewmag1.png", factory, iconThemeDirs); + doIconMapping("gtk-zoom-fit", "actions/viewmagfit.png", factory, iconThemeDirs); + doIconMapping("gtk-zoom-in", "actions/viewmag+.png", factory, iconThemeDirs); + doIconMapping("gtk-zoom-out", "actions/viewmag-.png", factory, iconThemeDirs); + + // Other icons that really should have Trinity equivalents in tdelibs + doIconMapping("list-add", "actions/add.png", factory, iconThemeDirs); + doIconMapping("list-remove", "actions/remove.png", factory, iconThemeDirs); + doIconMapping("list-add-symbolic", "actions/add.png", factory, iconThemeDirs); + doIconMapping("list-remove-symbolic", "actions/remove.png", factory, iconThemeDirs); + + gtk_icon_factory_add_default(factory); + } + // This function takes quite a long time to execute, and is run at the start of every app. // In order to speed it up, we can store the results in a file, along with the name of icon // theme and style. This file can then be regenerated when the icon theme or style change. @@ -537,14 +656,14 @@ void writeGtkThemeControlFile(int forceRecreate) { TQFile themeFile(themeFilePath); TQTextStream stream; - if (!forceRecreate && themeFile.exists()) - { + if (!forceRecreate && themeFile.exists()) { themeFile.open(IO_ReadOnly); stream.setDevice(TQT_TQIODEVICE(&themeFile)); - if (stream.readLine() == "/* " + iconTheme + ", " + tqApp->style().name() + ", " + RC_CACHE_VERSION + " */") - { + if (stream.readLine() == "/* " + iconTheme + ", " + tqApp->style().name() + ", " + RC_CACHE_VERSION + " */") { // This cache matches the current icon theme and style + themeFile.close(); + gtk3_tqt_reload_theme_definition_file(themeFilePath.latin1()); return; } @@ -829,128 +948,6 @@ void writeGtkThemeControlFile(int forceRecreate) { stream << parse_rc_string(tdeFontToGTKFontString(generalFont), "*"); stream << parse_rc_string(tdeFontToGTKFontString(toolBarFont), "*GtkToolbar*GtkButton*"); stream << parse_rc_string(tdeFontToGTKFontString(menuFont), "*.GtkMenu"); - - // Set up icons - // Build the list of icon theme directories. - // This function is recursive - it gets the directories of all the inherited themes as well - addIconThemeDir(iconTheme); - - if (iconThemeDirs.isEmpty()) { - themeFile.close(); - if (!forceRecreate) { - gtk3_tqt_reload_theme_definition_file(themeFilePath.latin1()); - } - return; - } - - GtkIconFactory* factory; - factory = gtk_icon_factory_new(); - - doIconMapping("gtk-about", "actions/about_kde.png", factory, iconThemeDirs); - doIconMapping("gtk-add", "actions/add.png", factory, iconThemeDirs); - doIconMapping("gtk-apply", "actions/apply.png", factory, iconThemeDirs); - doIconMapping("gtk-bold", "actions/text_bold.png", factory, iconThemeDirs); - doIconMapping("gtk-cancel", "actions/button_cancel.png", factory, iconThemeDirs); - doIconMapping("gtk-cdrom", "devices/cdrom_unmount.png", factory, iconThemeDirs); - doIconMapping("gtk-clear", "actions/editclear.png", factory, iconThemeDirs); - doIconMapping("gtk-close", "actions/fileclose.png", factory, iconThemeDirs); - doIconMapping("gtk-color-picker", "actions/colorpicker.png", factory, iconThemeDirs); - doIconMapping("gtk-copy", "actions/editcopy.png", factory, iconThemeDirs); - doIconMapping("gtk-convert", "actions/gtk-convert.png", factory, iconThemeDirs); - doIconMapping("gtk-connect", "actions/connect_creating.png", factory, iconThemeDirs); - doIconMapping("gtk-cut", "actions/editcut.png", factory, iconThemeDirs); - doIconMapping("gtk-delete", "actions/editdelete.png", factory, iconThemeDirs); - doIconMapping("gtk-dialog-authentication", "status/gtk-dialog-authentication", factory, iconThemeDirs); - doIconMapping("gtk-dialog-error", "actions/messagebox_critical.png", factory, iconThemeDirs); - doIconMapping("gtk-dialog-info", "actions/messagebox_info.png", factory, iconThemeDirs); - doIconMapping("gtk-dialog-question", "actions/help.png", factory, iconThemeDirs); - doIconMapping("gtk-dialog-warning", "actions/messagebox_warning.png", factory, iconThemeDirs); - doIconMapping("gtk-directory", "filesystems/folder.png", factory, iconThemeDirs); - doIconMapping("gtk-disconnect", "actions/connect_no.png", factory, iconThemeDirs); - doIconMapping("gtk-dnd", "mimetypes/empty.png", factory, iconThemeDirs); - doIconMapping("gtk-dnd-multiple", "mimetypes/kmultiple.png", factory, iconThemeDirs); - doIconMapping("gtk-edit", "actions/edit.png", factory, iconThemeDirs); //2.6 - doIconMapping("gtk-execute", "actions/exec.png", factory, iconThemeDirs); - doIconMapping("gtk-file", "mimetypes/empty.png", factory, iconThemeDirs); - doIconMapping("gtk-find", "actions/find.png", factory, iconThemeDirs); - doIconMapping("gtk-find-and-replace", "actions/find.png", factory, iconThemeDirs); // Is there a TDE "find and replace" icon? FIXME - doIconMapping("gtk-floppy", "devices/3floppy_unmount.png", factory, iconThemeDirs); - doIconMapping("gtk-fullscreen", "actions/window-fullscreen.png", factory, iconThemeDirs); - doIconMapping("gtk-goto-bottom", "actions/bottom.png", factory, iconThemeDirs); - doIconMapping("gtk-goto-first", "actions/start.png", factory, iconThemeDirs); - doIconMapping("gtk-goto-last", "actions/finish.png", factory, iconThemeDirs); - doIconMapping("gtk-goto-top", "actions/top.png", factory, iconThemeDirs); - doIconMapping("gtk-go-back", "actions/back.png", factory, iconThemeDirs); - doIconMapping("gtk-go-down", "actions/down.png", factory, iconThemeDirs); - doIconMapping("gtk-go-forward", "actions/forward.png", factory, iconThemeDirs); - doIconMapping("gtk-go-up", "actions/up.png", factory, iconThemeDirs); - doIconMapping("gtk-harddisk", "devices/hdd_unmount.png", factory, iconThemeDirs); - doIconMapping("gtk-help", "apps/khelpcenter.png", factory, iconThemeDirs); - doIconMapping("gtk-home", "filesystems/folder_home.png", factory, iconThemeDirs); - doIconMapping("gtk-indent", "actions/indent.png", factory, iconThemeDirs); - doIconMapping("gtk-index", "actions/contents.png", factory, iconThemeDirs); - doIconMapping("gtk-info", "actions/messagebox_info.png", factory, iconThemeDirs); - doIconMapping("gtk-italic", "actions/text_italic.png", factory, iconThemeDirs); - doIconMapping("gtk-jump-to", "actions/goto.png", factory, iconThemeDirs); - doIconMapping("gtk-justify-center", "actions/text_center.png", factory, iconThemeDirs); - doIconMapping("gtk-justify-fill", "actions/text_block.png", factory, iconThemeDirs); - doIconMapping("gtk-justify-left", "actions/text_left.png", factory, iconThemeDirs); - doIconMapping("gtk-justify-right", "actions/text_right.png", factory, iconThemeDirs); - doIconMapping("gtk-leave-fullscreen", "actions/window-nofullscreen.png", factory, iconThemeDirs); - doIconMapping("gtk-media-forward", "player-fwd.png", factory, iconThemeDirs); - doIconMapping("gtk-media-next", "actions/player-end.png", factory, iconThemeDirs); - doIconMapping("gtk-media-pause", "actions/player-pause.png", factory, iconThemeDirs); - doIconMapping("gtk-media-previous", "actions/player-start.png", factory, iconThemeDirs); - doIconMapping("gtk-media-record", "actions/gtk-media-record.png", factory, iconThemeDirs); // FIXME - doIconMapping("gtk-media-rewind", "actions/player-rew.png", factory, iconThemeDirs); - doIconMapping("gtk-media-stop", "actions/player-stop.png", factory, iconThemeDirs); - doIconMapping("gtk-missing-image", "mimetypes/unknown.png", factory, iconThemeDirs); - doIconMapping("gtk-network", "filesystems/network.png", factory, iconThemeDirs); - doIconMapping("gtk-new", "actions/filenew.png", factory, iconThemeDirs); - doIconMapping("gtk-no", "actions/gtk-no.png", factory, iconThemeDirs); - doIconMapping("gtk-ok", "actions/button_ok.png", factory, iconThemeDirs); - doIconMapping("gtk-open", "actions/fileopen.png", factory, iconThemeDirs); - //doIconMapping("gtk-orientation-landscape", factory, iconThemeDirs); // FIXME - //doIconMapping("gtk-orientation-portrait", factory, iconThemeDirs); // FIXME - //doIconMapping("gtk-orientation-reverse-landscape", factory, iconThemeDirs); // FIXME - //doIconMapping("gtk-orientation-reverse-portrait"", factory, iconThemeDirs); // FIXME - doIconMapping("gtk-paste", "actions/editpaste.png", factory, iconThemeDirs); - doIconMapping("gtk-preferences", "actions/configure.png", factory, iconThemeDirs); - doIconMapping("gtk-print", "actions/fileprint.png", factory, iconThemeDirs); - doIconMapping("gtk-print-preview", "actions/filequickprint.png", factory, iconThemeDirs); - doIconMapping("gtk-properties", "actions/configure.png", factory, iconThemeDirs); - doIconMapping("gtk-quit", "actions/exit.png", factory, iconThemeDirs); - doIconMapping("gtk-redo", "actions/redo.png", factory, iconThemeDirs); - doIconMapping("gtk-refresh", "actions/reload.png", factory, iconThemeDirs); - doIconMapping("gtk-remove", "actions/remove.png", factory, iconThemeDirs); - doIconMapping("gtk-revert-to-saved", "actions/revert.png", factory, iconThemeDirs); - doIconMapping("gtk-save", "actions/filesave.png", factory, iconThemeDirs); - doIconMapping("gtk-save-as", "actions/filesaveas.png", factory, iconThemeDirs); - doIconMapping("gtk-select-all", "actions/gtk-select-all.png", factory, iconThemeDirs); // FIXME - doIconMapping("gtk-select-color", "actions/colorize.png", factory, iconThemeDirs); - doIconMapping("gtk-select-font", "mimetypes/font.png", factory, iconThemeDirs); - //doIconMapping("gtk-sort-ascending", "??", factory, iconThemeDirs); // FIXME - //doIconMapping("gtk-sort-descending", "??", factory, iconThemeDirs); // FIXME - doIconMapping("gtk-spell-check", "actions/spellcheck.png", factory, iconThemeDirs); - doIconMapping("gtk-stop", "actions/stop.png", factory, iconThemeDirs); - doIconMapping("gtk-strikethrough", "actions/text_strike.png", factory, iconThemeDirs); - doIconMapping("gtk-undelete", "actions/gtk-undelete.png", factory, iconThemeDirs); // FIXME - doIconMapping("gtk-underline", "actions/text_under.png", factory, iconThemeDirs); - doIconMapping("gtk-undo", "actions/undo.png", factory, iconThemeDirs); - doIconMapping("gtk-unindent", "actions/unindent.png", factory, iconThemeDirs); - doIconMapping("gtk-yes", "actions/button_ok.png", factory, iconThemeDirs); // Verify mapping here - doIconMapping("gtk-zoom-100", "actions/viewmag1.png", factory, iconThemeDirs); - doIconMapping("gtk-zoom-fit", "actions/viewmagfit.png", factory, iconThemeDirs); - doIconMapping("gtk-zoom-in", "actions/viewmag+.png", factory, iconThemeDirs); - doIconMapping("gtk-zoom-out", "actions/viewmag-.png", factory, iconThemeDirs); - - // Other icons that really should have Trinity equivalents in tdelibs - doIconMapping("list-add", "actions/add.png", factory, iconThemeDirs); - doIconMapping("list-remove", "actions/remove.png", factory, iconThemeDirs); - doIconMapping("list-add-symbolic", "actions/add.png", factory, iconThemeDirs); - doIconMapping("list-remove-symbolic", "actions/remove.png", factory, iconThemeDirs); - - gtk_icon_factory_add_default(factory); themeFile.close(); -- cgit v1.2.1