Drop support for GTK+ 2

The minimum GTK version is now GTK+ 3.4, which is available since 2012.
It's part of Ubuntu LTS 12.04, and so should be available on any halfway
modern linux distribution.

This should allow getting rid of using deprecated GTK+ API much easier.
shapetextures
Armin Burgmeier 2015-10-18 14:20:40 -04:00
parent 79b9a793f5
commit ef4ea2d931
7 changed files with 21 additions and 103 deletions

View File

@ -52,8 +52,6 @@ CMAKE_DEPENDENT_OPTION(USE_SDL_MAINLOOP "Use SDL to create windows etc." OFF "NO
CMAKE_DEPENDENT_OPTION(USE_X11 "Use X11 to create windows etc." ON
"UNIX AND NOT APPLE AND NOT USE_SDL_MAINLOOP AND NOT USE_CONSOLE" OFF)
CMAKE_DEPENDENT_OPTION(USE_GTK "Use GTK for the developer mode" ON "USE_X11" OFF)
CMAKE_DEPENDENT_OPTION(USE_GTK3 "Use GTK3 instead of GTK2" OFF "USE_GTK" OFF)
CMAKE_DEPENDENT_OPTION(USE_COCOA "Use Apple Cocoa for the developer mode and the windows." ON "APPLE" OFF)
option(WITH_AUTOMATIC_UPDATE "Automatic updates are downloaded from the project website." OFF)
@ -860,25 +858,15 @@ endif()
# otherwise the path is not used for linking clonk
if(USE_GTK)
find_package(PkgConfig)
if (USE_GTK3)
pkg_check_modules(GTK3 REQUIRED "glib-2.0 >= 2.32" "gtk+-3.0 >= 3.4")
include_directories(${GTK3_INCLUDE_DIRS})
link_directories(${GTK3_LIBRARY_DIRS})
else()
pkg_check_modules(GTK REQUIRED "glib-2.0 >= 2.28" "gtk+-2.0 >= 2.20")
include_directories(${GTK_INCLUDE_DIRS})
link_directories(${GTK_LIBRARY_DIRS})
endif()
pkg_check_modules(GTK REQUIRED "glib-2.0 >= 2.32" "gtk+-3.0 >= 3.4")
include_directories(${GTK_INCLUDE_DIRS})
link_directories(${GTK_LIBRARY_DIRS})
endif()
# Try to find GTK for mape
find_package(PkgConfig)
if (PKG_CONFIG_FOUND)
if (USE_GTK3)
pkg_check_modules(MAPE_GTK glib-2.0>=2.32 gthread-2.0 gtk+-3.0>=3.4 gtksourceview-3.0)
else()
pkg_check_modules(MAPE_GTK glib-2.0>=2.28 gthread-2.0 gtk+-2.0>=2.20 gtksourceview-2.0)
endif()
pkg_check_modules(MAPE_GTK glib-2.0>=2.32 gthread-2.0 gtk+-3.0>=3.4 gtksourceview-3.0)
endif()
if(MAPE_GTK_FOUND)
# hrm, cmake doesn't have target_include_directories...
@ -1342,19 +1330,11 @@ if(NOT USE_CONSOLE)
CHECK_CXX_SOURCE_COMPILES("#include <GL/glew.h>\nvoid GLAPIENTRY OpenGLDebugProc(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const char* message, const void* userParam) {}\nint main() { GLDEBUGPROCARB proc = &OpenGLDebugProc; }" GLDEBUGPROCARB_USERPARAM_IS_CONST)
endif()
if(USE_GTK)
if(USE_GTK3)
SET(WITH_DEVELOPER_MODE ${GTK3_FOUND})
SET(WITH_GLIB ${GTK3_FOUND})
target_link_libraries(openclonk
${GTK3_LIBRARIES}
)
else()
SET(WITH_DEVELOPER_MODE ${GTK_FOUND})
SET(WITH_GLIB ${GTK_FOUND})
target_link_libraries(openclonk
${GTK_LIBRARIES}
)
endif()
SET(WITH_DEVELOPER_MODE ${GTK_FOUND})
SET(WITH_GLIB ${GTK_FOUND})
target_link_libraries(openclonk
${GTK_LIBRARIES}
)
endif()
if(MAPE_GTK_FOUND)
target_link_libraries(mape ${MAPE_GTK_LIBRARIES})

4
README
View File

@ -29,7 +29,7 @@ Linux Specific
==============
For building OpenClonk on Linux, you need the following libraries in addition
to the ones listed above:
- GTK+ 2.0 or 3.0 (http://www.gtk.org)
- GTK+ 3.4 or greater (http://www.gtk.org)
- libGL (http://www.mesa3d.org/)
- SDL 1.2 (http://www.libsdl.org/download-1.2.php)
- SDL_mixer 1.2 (http://www.libsdl.org/projects/SDL_mixer/release-1.2.html)
@ -38,7 +38,7 @@ to the ones listed above:
Most distributions should provide these dependencies via their packaging
system. For Debian based distributions, you will need these packages:
build-essential cmake imagemagick libfreetype6-dev libgl1-mesa-dev
libglew-dev libgtk2.0-dev libjpeg-dev libpng-dev libsdl1.2-dev
libglew-dev libgtk-3-dev libjpeg-dev libpng-dev libsdl1.2-dev
libsdl-mixer1.2-dev libupnp-dev libxrandr-dev x11proto-core-dev
zlib1g-dev
At least gcc-4.9 is required.

View File

@ -1109,17 +1109,10 @@ bool C4ToolsDlg::State::Open()
gtk_box_pack_start(GTK_BOX(local_hbox), scale, false, false, 0);
vbox = gtk_vbox_new(false, 6);
#if GTK_CHECK_VERSION(2,23,0)
fg_materials = gtk_combo_box_text_new();
fg_textures = gtk_combo_box_text_new();
bg_materials = gtk_combo_box_text_new();
bg_textures = gtk_combo_box_text_new();
#else
fg_materials = gtk_combo_box_new_text();
fg_textures = gtk_combo_box_new_text();
bg_materials = gtk_combo_box_new_text();
bg_textures = gtk_combo_box_new_text();
#endif
// Link the material combo boxes together, but not the texture combo boxes,
// so that we can sort the texture combo box differently.
@ -1178,11 +1171,6 @@ void C4ConsoleGUI::ToolsDlgInitMaterialCtrls(C4ToolsDlg *dlg)
dlg->state->InitMaterialCtrls();
}
#if GTK_CHECK_VERSION(2,23,0)
#define gtk_combo_box_append_text(c,t) gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(c),t)
#define gtk_combo_box_prepend_text(c,t) gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(c),t)
#define gtk_combo_box_get_active_text(c) gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(c))
#endif
void C4ToolsDlg::State::InitMaterialCtrls()
{
GtkListStore* list = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(fg_materials)));
@ -1191,11 +1179,11 @@ void C4ToolsDlg::State::InitMaterialCtrls()
g_signal_handler_block(bg_materials, handlerBgMaterials);
gtk_list_store_clear(list);
gtk_combo_box_append_text(GTK_COMBO_BOX(fg_materials), C4TLS_MatSky);
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(fg_materials), C4TLS_MatSky);
for (int32_t cnt = 0; cnt < ::MaterialMap.Num; cnt++)
{
gtk_combo_box_append_text(GTK_COMBO_BOX(fg_materials), ::MaterialMap.Map[cnt].Name);
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(fg_materials), ::MaterialMap.Map[cnt].Name);
}
g_signal_handler_unblock(fg_materials, handlerFgMaterials);
@ -1260,13 +1248,13 @@ void C4ToolsDlg::UpdateTextures()
if (!::TextureMap.GetIndex(material, szTexture, false))
{
fAnyEntry = true;
gtk_combo_box_prepend_text(box, szTexture);
gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(box), szTexture);
}
}
// separator
if (fAnyEntry)
{
gtk_combo_box_prepend_text(box, "-------");
gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(box), "-------");
}
// atop: valid textures
@ -1275,7 +1263,7 @@ void C4ToolsDlg::UpdateTextures()
// Current material-texture valid? Always valid for exact mode
if (::TextureMap.GetIndex(material,szTexture,false) || ::Landscape.Mode==C4LSC_Exact)
{
gtk_combo_box_prepend_text(box, szTexture);
gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(box), szTexture);
}
}
}
@ -1630,28 +1618,28 @@ void C4ToolsDlg::State::OnButtonNoIft(GtkWidget* widget, gpointer data)
void C4ToolsDlg::State::OnComboMaterial(GtkWidget* widget, gpointer data)
{
gchar* text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget));
gchar* text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widget));
static_cast<C4ToolsDlg::State*>(data)->GetOwner()->SetMaterial(text);
g_free(text);
}
void C4ToolsDlg::State::OnComboTexture(GtkWidget* widget, gpointer data)
{
gchar* text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget));
gchar* text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widget));
static_cast<C4ToolsDlg::State*>(data)->GetOwner()->SetTexture(text);
g_free(text);
}
void C4ToolsDlg::State::OnComboBgMaterial(GtkWidget* widget, gpointer data)
{
gchar* text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget));
gchar* text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widget));
static_cast<C4ToolsDlg::State*>(data)->GetOwner()->SetBackMaterial(text);
g_free(text);
}
void C4ToolsDlg::State::OnComboBgTexture(GtkWidget* widget, gpointer data)
{
gchar* text = gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget));
gchar* text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widget));
static_cast<C4ToolsDlg::State*>(data)->GetOwner()->SetBackTexture(text);
g_free(text);
}

View File

@ -453,11 +453,7 @@ StdStrBuf C4KeyCodeEx::KeyCode2String(C4KeyCode wCode, bool fHumanReadable, bool
KeySym keysym = (KeySym)XkbKeycodeToKeysym(dpy,wCode+8,0,0);
char* name = NULL;
if (keysym != NoSymbol) { // is the keycode without shift modifiers mapped to a symbol?
#if defined(USE_GTK3)
name = gtk_accelerator_get_label_with_keycode(dpy, keysym, wCode+8, (GdkModifierType)0);
#else
name = gtk_accelerator_get_label(keysym, (GdkModifierType)0);
#endif
name = gtk_accelerator_get_label_with_keycode(gdk_display_get_default(), keysym, wCode+8, (GdkModifierType)0);
}
if (name) { // is there a string representation of the keysym?
// prevent memleak

View File

@ -525,11 +525,7 @@ static gboolean mape_disk_view_cb_key_press_event(GtkWidget* widget,
disk_view = (MapeDiskView*)user_data;
#if GTK_CHECK_VERSION(2,21,8)
if(event->keyval != GDK_KEY_Left && event->keyval != GDK_KEY_Right)
#else
if(event->keyval != GDK_Left && event->keyval != GDK_Right)
#endif
return FALSE;
gtk_tree_view_get_cursor(
@ -542,11 +538,7 @@ static gboolean mape_disk_view_cb_key_press_event(GtkWidget* widget,
switch(event->keyval)
{
#if GTK_CHECK_VERSION(2,21,8)
case GDK_KEY_Left:
#else
case GDK_Left:
#endif
result = gtk_tree_view_row_expanded(
GTK_TREE_VIEW(disk_view->view),
path
@ -576,11 +568,7 @@ static gboolean mape_disk_view_cb_key_press_event(GtkWidget* widget,
}
break;
#if GTK_CHECK_VERSION(2,21,8)
case GDK_KEY_Right:
#else
case GDK_Right:
#endif
result = gtk_tree_view_row_expanded(
GTK_TREE_VIEW(disk_view->view),
path

View File

@ -32,11 +32,7 @@ MapeIconView* mape_icon_view_new(GError** error)
view->view = gtk_icon_view_new_with_model(view->list_store);
g_object_unref(view->list_store);
#if GTK_CHECK_VERSION(2,22,0)
gtk_icon_view_set_item_orientation(
#else
gtk_icon_view_set_orientation(
#endif
GTK_ICON_VIEW(view->view),
GTK_ORIENTATION_HORIZONTAL
);

View File

@ -189,11 +189,7 @@ static void OnRealizeStatic(GtkWidget* widget, gpointer user_data)
static gboolean OnKeyPressStatic(GtkWidget* widget, GdkEventKey* event, gpointer user_data)
{
#if GTK_CHECK_VERSION(2,21,8)
if (event->keyval == GDK_KEY_Scroll_Lock)
#else
if (event->keyval == GDK_Scroll_Lock)
#endif
{
static_cast<C4ViewportWindow*>(user_data)->cvp->TogglePlayerLock();
return true;
@ -446,14 +442,12 @@ static gboolean OnScroll(GtkWidget* widget, GdkEventScroll* event, gpointer user
C4GUI::DialogWindow * window = static_cast<C4GUI::DialogWindow*>(user_data);
C4GUI::Dialog *pDlg = ::pGUI->GetDialog(window);
int idy;
#if GTK_CHECK_VERSION(3,4,0)
gdouble dx, dy;
if (gdk_event_get_scroll_deltas((GdkEvent*)event, &dx, &dy))
{
idy = short(round(dy));
}
else
#endif
{
if (event->direction == GDK_SCROLL_UP)
idy = 32;
@ -662,11 +656,7 @@ C4Window* C4Window::Init(WindowKind windowKind, C4AbstractApp * pApp, const char
gtk_drag_dest_set(GTK_WIDGET(render_widget), GTK_DEST_DEFAULT_ALL, drag_drop_entries, 1, GDK_ACTION_COPY);
g_signal_connect(G_OBJECT(render_widget), "drag-data-received", G_CALLBACK(OnDragDataReceivedStatic), this);
#if GTK_CHECK_VERSION(3,0,0)
g_signal_connect(G_OBJECT(render_widget), "draw", G_CALLBACK(OnExposeStatic), this);
#else
g_signal_connect(G_OBJECT(render_widget), "expose-event", G_CALLBACK(OnExposeStatic), this);
#endif
g_signal_connect(G_OBJECT(window), "key-press-event", G_CALLBACK(OnKeyPressStatic), this);
g_signal_connect(G_OBJECT(window), "key-release-event", G_CALLBACK(OnKeyReleaseStatic), this);
g_signal_connect(G_OBJECT(window), "scroll-event", G_CALLBACK(OnScrollVW), this);
@ -684,9 +674,7 @@ C4Window* C4Window::Init(WindowKind windowKind, C4AbstractApp * pApp, const char
gtk_widget_set_double_buffered (GTK_WIDGET(render_widget), false);
gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(Console.window));
#if GTK_CHECK_VERSION(3,0,0)
gtk_window_set_has_resize_grip(GTK_WINDOW(window), false);
#endif
}
else if (windowKind == W_Fullscreen)
{
@ -712,9 +700,7 @@ C4Window* C4Window::Init(WindowKind windowKind, C4AbstractApp * pApp, const char
g_object_set_property (G_OBJECT (render_widget), "can-focus", &val);
g_object_set_property (G_OBJECT (window), "can-focus", &val);
g_value_unset (&val);
#if GTK_CHECK_VERSION(3,0,0)
gtk_window_set_has_resize_grip(GTK_WINDOW(window), false);
#endif
}
else if (windowKind == W_GuiWindow)
{
@ -726,9 +712,7 @@ C4Window* C4Window::Init(WindowKind windowKind, C4AbstractApp * pApp, const char
g_signal_connect(G_OBJECT(window), "scroll-event", G_CALLBACK(OnScroll), this);
gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(Console.window));
#if GTK_CHECK_VERSION(3,0,0)
gtk_window_set_has_resize_grip(GTK_WINDOW(window), false);
#endif
}
else if (windowKind == W_Console)
{
@ -743,9 +727,7 @@ C4Window* C4Window::Init(WindowKind windowKind, C4AbstractApp * pApp, const char
g_signal_connect(G_OBJECT(window), "delete-event", G_CALLBACK(OnDelete), this);
handlerDestroy = g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(OnDestroyStatic), this);
gtk_widget_add_events(GTK_WIDGET(window), GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_SCROLL_MASK);
#if GTK_CHECK_VERSION(3,4,0)
gtk_widget_add_events(GTK_WIDGET(window), GDK_SMOOTH_SCROLL_MASK);
#endif
GdkScreen * scr = gtk_widget_get_screen(GTK_WIDGET(render_widget));
Display * const dpy = gdk_x11_display_get_xdisplay(gdk_display_get_default());
@ -753,13 +735,7 @@ C4Window* C4Window::Init(WindowKind windowKind, C4AbstractApp * pApp, const char
assert(vis_info);
GdkVisual * vis = gdk_x11_screen_lookup_visual(scr, vis_info->visualid);
XFree(vis_info);
#if GTK_CHECK_VERSION(2,91,0)
gtk_widget_set_visual(GTK_WIDGET(render_widget),vis);
#else
GdkColormap * cmap = gdk_colormap_new(vis, true);
gtk_widget_set_colormap(GTK_WIDGET(render_widget), cmap);
g_object_unref(cmap);
#endif
gtk_widget_show_all(GTK_WIDGET(window));
// XVisualInfo vitmpl; int blub;
@ -832,13 +808,7 @@ bool C4Window::ReInit(C4AbstractApp* pApp)
gtk_widget_set_double_buffered (GTK_WIDGET(render_widget), false);
g_object_set(G_OBJECT(render_widget), "can-focus", TRUE, NULL);
#if GTK_CHECK_VERSION(2,91,0)
gtk_widget_set_visual(GTK_WIDGET(render_widget),vis);
#else
GdkColormap * cmap = gdk_colormap_new(vis, true);
gtk_widget_set_colormap(GTK_WIDGET(render_widget), cmap);
g_object_unref(cmap);
#endif
Info = new_info;