Don't access GtkWidget fields directly
Since many accessor are new in GTK versions we don't depend on, add a header that defines them to the direct access if they aren't available.
This commit is contained in:
parent
484cc3adac
commit
a763e307f7
@ -25,6 +25,7 @@
|
||||
#endif
|
||||
|
||||
#include "geanyplugin.h"
|
||||
#include "gtkcompat.h"
|
||||
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
@ -529,7 +530,7 @@ GtkWidget *plugin_configure(GtkDialog *dialog)
|
||||
vbox = gtk_vbox_new(FALSE, 6);
|
||||
|
||||
notebook = gtk_notebook_new();
|
||||
GTK_WIDGET_UNSET_FLAGS(notebook, GTK_CAN_FOCUS);
|
||||
gtk_widget_set_can_focus(notebook, FALSE);
|
||||
gtk_container_set_border_width(GTK_CONTAINER(notebook), 5);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), notebook, FALSE, TRUE, 0);
|
||||
|
||||
|
@ -26,6 +26,7 @@
|
||||
#endif
|
||||
|
||||
#include "geanyplugin.h"
|
||||
#include "gtkcompat.h"
|
||||
#include <string.h>
|
||||
|
||||
|
||||
@ -300,8 +301,8 @@ static void split_view(gboolean horizontal)
|
||||
GtkWidget *parent = gtk_widget_get_parent(notebook);
|
||||
GtkWidget *pane, *toolbar, *box;
|
||||
GeanyDocument *doc = document_get_current();
|
||||
gint width = notebook->allocation.width / 2;
|
||||
gint height = notebook->allocation.height / 2;
|
||||
gint width = gtk_widget_get_allocated_width(notebook) / 2;
|
||||
gint height = gtk_widget_get_allocated_height(notebook) / 2;
|
||||
|
||||
g_return_if_fail(doc);
|
||||
g_return_if_fail(edit_window.editor == NULL);
|
||||
|
@ -20,6 +20,7 @@ SRCS = \
|
||||
geanymenubuttonaction.c geanymenubuttonaction.h \
|
||||
geanyobject.c geanyobject.h \
|
||||
geanywraplabel.c geanywraplabel.h \
|
||||
gtkcompat.h \
|
||||
highlighting.c highlighting.h \
|
||||
highlightingmappings.h \
|
||||
keybindings.c keybindings.h \
|
||||
|
@ -61,6 +61,7 @@
|
||||
#include "win32.h"
|
||||
#include "toolbar.h"
|
||||
#include "geanymenubuttonaction.h"
|
||||
#include "gtkcompat.h"
|
||||
|
||||
/* g_spawn_async_with_pipes doesn't work on Windows */
|
||||
#ifdef G_OS_WIN32
|
||||
@ -1936,7 +1937,7 @@ static void on_label_button_clicked(GtkWidget *wid, gpointer user_data)
|
||||
const gchar *old = gtk_button_get_label(GTK_BUTTON(wid));
|
||||
gchar *str;
|
||||
|
||||
if (GTK_WIDGET_TOPLEVEL(top_level) && GTK_IS_WINDOW(top_level))
|
||||
if (gtk_widget_is_toplevel(top_level) && GTK_IS_WINDOW(top_level))
|
||||
str = dialogs_show_input(_("Set menu item label"), GTK_WINDOW(top_level), NULL, old);
|
||||
else
|
||||
str = dialogs_show_input(_("Set menu item label"), NULL, NULL, old);
|
||||
|
@ -65,6 +65,7 @@
|
||||
#include "toolbar.h"
|
||||
#include "highlighting.h"
|
||||
#include "pluginutils.h"
|
||||
#include "gtkcompat.h"
|
||||
|
||||
|
||||
#ifdef HAVE_VTE
|
||||
@ -1811,7 +1812,7 @@ G_MODULE_EXPORT void on_back_activate(GtkMenuItem *menuitem, gpointer user_data)
|
||||
|
||||
G_MODULE_EXPORT gboolean on_motion_event(GtkWidget *widget, GdkEventMotion *event, gpointer user_data)
|
||||
{
|
||||
if (prefs.auto_focus && ! GTK_WIDGET_HAS_FOCUS(widget))
|
||||
if (prefs.auto_focus && ! gtk_widget_has_focus(widget))
|
||||
gtk_widget_grab_focus(widget);
|
||||
|
||||
return FALSE;
|
||||
|
@ -60,6 +60,7 @@
|
||||
#include "projectprivate.h"
|
||||
#include "main.h"
|
||||
#include "highlighting.h"
|
||||
#include "gtkcompat.h"
|
||||
|
||||
|
||||
/* Note: use sciwrappers.h instead where possible.
|
||||
@ -191,7 +192,7 @@ static void on_snippet_keybinding_activate(gchar *key)
|
||||
const gchar *s;
|
||||
GHashTable *specials;
|
||||
|
||||
if (!doc || !GTK_WIDGET_HAS_FOCUS(doc->editor->sci))
|
||||
if (!doc || !gtk_widget_has_focus(GTK_WIDGET(doc->editor->sci)))
|
||||
return;
|
||||
|
||||
s = snippets_find_completion_by_name(doc->file_type->name, key);
|
||||
|
3
src/gb.c
3
src/gb.c
@ -29,6 +29,7 @@
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
#include <gdk-pixbuf/gdk-pixdata.h>
|
||||
#include "gtkcompat.h"
|
||||
|
||||
#define MAX_PICS 10
|
||||
#define LOOP_DELAY 200000 /* micro seconds */
|
||||
@ -191,7 +192,7 @@ static GtkWidget *create_help_dialog(GtkWindow *parent)
|
||||
okbutton1 = gtk_button_new_from_stock(GTK_STOCK_OK);
|
||||
gtk_widget_show(okbutton1);
|
||||
gtk_dialog_add_action_widget(GTK_DIALOG(help_dialog), okbutton1, GTK_RESPONSE_OK);
|
||||
GTK_WIDGET_SET_FLAGS(okbutton1, GTK_CAN_DEFAULT);
|
||||
gtk_widget_set_can_default(okbutton1, TRUE);
|
||||
|
||||
return help_dialog;
|
||||
}
|
||||
|
57
src/gtkcompat.h
Normal file
57
src/gtkcompat.h
Normal file
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* gtkcompat.h - this file is part of Geany, a fast and lightweight IDE
|
||||
*
|
||||
* Copyright 2012 Colomban Wendling <ban(at)herbesfolles(dot)org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
/* Compatibility macros to support older GTK+ versions */
|
||||
|
||||
#ifndef GTK_COMPAT_H
|
||||
#define GTK_COMPAT_H
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
||||
/* GtkWidget */
|
||||
#if ! GTK_CHECK_VERSION(2, 18, 0)
|
||||
# define compat_widget_set_flag(widget, flag, enable) \
|
||||
((enable) ? GTK_WIDGET_SET_FLAGS((widget), (flag)) : GTK_WIDGET_UNSET_FLAGS((widget), (flag)))
|
||||
# define gtk_widget_set_can_default(widget, can_default) \
|
||||
compat_widget_set_flag((widget), GTK_CAN_DEFAULT, (can_default))
|
||||
# define gtk_widget_is_toplevel(widget) GTK_WIDGET_TOPLEVEL(widget)
|
||||
# define gtk_widget_is_sensitive(widget) GTK_WIDGET_IS_SENSITIVE(widget)
|
||||
# define gtk_widget_has_focus(widget) GTK_WIDGET_HAS_FOCUS(widget)
|
||||
# define gtk_widget_get_sensitive(widget) GTK_WIDGET_SENSITIVE(widget)
|
||||
# define gtk_widget_set_has_window(widget, has_window) \
|
||||
compat_widget_set_flag((widget), GTK_NO_WINDOW, !(has_window))
|
||||
# define gtk_widget_set_can_focus(widget, can_focus) \
|
||||
compat_widget_set_flag((widget), GTK_CAN_FOCUS, (can_focus))
|
||||
#endif
|
||||
#if ! GTK_CHECK_VERSION(2, 20, 0)
|
||||
# define gtk_widget_get_mapped(widget) GTK_WIDGET_MAPPED(widget)
|
||||
#endif
|
||||
#if ! GTK_CHECK_VERSION(3, 0, 0)
|
||||
# define gtk_widget_get_allocated_height(widget) (((GtkWidget *) (widget))->allocation.height)
|
||||
# define gtk_widget_get_allocated_width(widget) (((GtkWidget *) (widget))->allocation.width)
|
||||
#endif
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* GTK_COMPAT_H */
|
@ -56,6 +56,7 @@
|
||||
#include "geanywraplabel.h"
|
||||
#include "main.h"
|
||||
#include "search.h"
|
||||
#include "gtkcompat.h"
|
||||
#ifdef HAVE_VTE
|
||||
# include "vte.h"
|
||||
#endif
|
||||
@ -1061,7 +1062,7 @@ static gboolean check_menu_key(GeanyDocument *doc, guint keyval, guint state, gu
|
||||
static gboolean on_menu_expose_event(GtkWidget *widget, GdkEventExpose *event,
|
||||
gpointer user_data)
|
||||
{
|
||||
if (!GTK_WIDGET_SENSITIVE(widget))
|
||||
if (!gtk_widget_get_sensitive(widget))
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(widget), TRUE);
|
||||
return FALSE;
|
||||
}
|
||||
@ -1488,7 +1489,7 @@ static gboolean cb_func_build_action(guint key_id)
|
||||
if (doc == NULL)
|
||||
return TRUE;
|
||||
|
||||
if (!GTK_WIDGET_IS_SENSITIVE(ui_lookup_widget(main_widgets.window, "menu_build1")))
|
||||
if (!gtk_widget_is_sensitive(ui_lookup_widget(main_widgets.window, "menu_build1")))
|
||||
return TRUE;
|
||||
|
||||
menu_items = build_get_menu_items(doc->file_type->id);
|
||||
@ -1528,7 +1529,7 @@ static gboolean cb_func_build_action(guint key_id)
|
||||
/* Note: For Build menu items it's OK (at the moment) to assume they are in the correct
|
||||
* sensitive state, but some other menus don't update the sensitive status until
|
||||
* they are redrawn. */
|
||||
if (item && GTK_WIDGET_IS_SENSITIVE(item))
|
||||
if (item && gtk_widget_is_sensitive(item))
|
||||
gtk_menu_item_activate(GTK_MENU_ITEM(item));
|
||||
return TRUE;
|
||||
}
|
||||
@ -1611,7 +1612,7 @@ static gboolean cb_func_switch_action(guint key_id)
|
||||
if (doc != NULL)
|
||||
{
|
||||
GtkWidget *sci = GTK_WIDGET(doc->editor->sci);
|
||||
if (GTK_WIDGET_HAS_FOCUS(sci))
|
||||
if (gtk_widget_has_focus(sci))
|
||||
ui_update_statusbar(doc, -1);
|
||||
else
|
||||
gtk_widget_grab_focus(sci);
|
||||
@ -1841,7 +1842,7 @@ static gboolean cb_func_goto_action(guint key_id)
|
||||
GtkWidget *wid = toolbar_get_widget_child_by_name("GotoEntry");
|
||||
|
||||
/* use toolbar item if shown & not in the drop down overflow menu */
|
||||
if (wid && GTK_WIDGET_MAPPED(wid))
|
||||
if (wid && gtk_widget_get_mapped(wid))
|
||||
{
|
||||
gtk_widget_grab_focus(wid);
|
||||
return TRUE;
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include "utils.h"
|
||||
#include "keybindings.h"
|
||||
#include "main.h"
|
||||
#include "gtkcompat.h"
|
||||
|
||||
#define GEANY_DND_NOTEBOOK_TAB_TYPE "geany_dnd_notebook_tab"
|
||||
|
||||
@ -376,11 +377,11 @@ static gboolean is_position_on_tab_bar(GtkNotebook *notebook, GdkEventButton *ev
|
||||
case GTK_POS_TOP:
|
||||
case GTK_POS_BOTTOM:
|
||||
{
|
||||
if (event->y >= 0 && event->y <= tab->allocation.height)
|
||||
if (event->y >= 0 && event->y <= gtk_widget_get_allocated_height(tab))
|
||||
{
|
||||
if (! gtk_notebook_show_arrows(notebook) || (
|
||||
x > scroll_arrow_hlength &&
|
||||
x < nb->allocation.width - scroll_arrow_hlength))
|
||||
x < gtk_widget_get_allocated_width(nb) - scroll_arrow_hlength))
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
@ -388,11 +389,11 @@ static gboolean is_position_on_tab_bar(GtkNotebook *notebook, GdkEventButton *ev
|
||||
case GTK_POS_LEFT:
|
||||
case GTK_POS_RIGHT:
|
||||
{
|
||||
if (event->x >= 0 && event->x <= tab->allocation.width)
|
||||
if (event->x >= 0 && event->x <= gtk_widget_get_allocated_width(tab))
|
||||
{
|
||||
if (! gtk_notebook_show_arrows(notebook) || (
|
||||
y > scroll_arrow_vlength &&
|
||||
y < nb->allocation.height - scroll_arrow_vlength))
|
||||
y < gtk_widget_get_allocated_height(nb) - scroll_arrow_vlength))
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@ -666,7 +667,7 @@ gint notebook_new_tab(GeanyDocument *this)
|
||||
/* get button press events for the tab label and the space between it and
|
||||
* the close button, if any */
|
||||
ebox = gtk_event_box_new();
|
||||
GTK_WIDGET_SET_FLAGS(ebox, GTK_NO_WINDOW);
|
||||
gtk_widget_set_has_window(ebox, FALSE);
|
||||
g_signal_connect(ebox, "button-press-event", G_CALLBACK(notebook_tab_click), page);
|
||||
/* focus the current document after clicking on a tab */
|
||||
g_signal_connect_after(ebox, "button-release-event",
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include "keyfile.h"
|
||||
#include "stash.h"
|
||||
#include "toolbar.h"
|
||||
#include "gtkcompat.h"
|
||||
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
@ -551,7 +552,7 @@ void search_show_find_dialog(void)
|
||||
else
|
||||
{
|
||||
/* only set selection if the dialog is not already visible */
|
||||
if (! GTK_WIDGET_VISIBLE(find_dlg.dialog) && sel)
|
||||
if (! gtk_widget_get_visible(find_dlg.dialog) && sel)
|
||||
gtk_entry_set_text(GTK_ENTRY(find_dlg.entry), sel);
|
||||
gtk_widget_grab_focus(find_dlg.entry);
|
||||
set_dialog_position(find_dlg.dialog, find_dlg.position);
|
||||
@ -725,7 +726,7 @@ void search_show_replace_dialog(void)
|
||||
else
|
||||
{
|
||||
/* only set selection if the dialog is not already visible */
|
||||
if (! GTK_WIDGET_VISIBLE(replace_dlg.dialog) && sel)
|
||||
if (! gtk_widget_get_visible(replace_dlg.dialog) && sel)
|
||||
gtk_entry_set_text(GTK_ENTRY(replace_dlg.find_entry), sel);
|
||||
if (sel != NULL) /* when we have a selection, reset the entry widget's background colour */
|
||||
ui_set_search_entry_background(replace_dlg.find_entry, TRUE);
|
||||
@ -1024,7 +1025,7 @@ void search_show_find_in_files_dialog(const gchar *dir)
|
||||
stash_group_display(fif_prefs, fif_dlg.dialog);
|
||||
|
||||
/* only set selection if the dialog is not already visible, or has just been created */
|
||||
if (doc && ! sel && ! GTK_WIDGET_VISIBLE(fif_dlg.dialog))
|
||||
if (doc && ! sel && ! gtk_widget_get_visible(fif_dlg.dialog))
|
||||
sel = editor_get_default_selection(doc->editor, search_prefs.use_current_word, NULL);
|
||||
|
||||
entry = gtk_bin_get_child(GTK_BIN(fif_dlg.search_combo));
|
||||
|
@ -56,6 +56,7 @@
|
||||
#include "main.h"
|
||||
#include "stash.h"
|
||||
#include "keyfile.h"
|
||||
#include "gtkcompat.h"
|
||||
|
||||
|
||||
GeanyInterfacePrefs interface_prefs;
|
||||
@ -2010,7 +2011,7 @@ void ui_swap_sidebar_pos(void)
|
||||
g_object_unref(left);
|
||||
g_object_unref(right);
|
||||
|
||||
gtk_paned_set_position(GTK_PANED(pane), pane->allocation.width
|
||||
gtk_paned_set_position(GTK_PANED(pane), gtk_widget_get_allocated_width(pane)
|
||||
- gtk_paned_get_position(GTK_PANED(pane)));
|
||||
}
|
||||
|
||||
@ -2357,7 +2358,7 @@ static void on_auto_separator_item_show_hide(GtkWidget *widget, gpointer user_da
|
||||
{
|
||||
GeanyAutoSeparator *autosep = user_data;
|
||||
|
||||
if (GTK_WIDGET_VISIBLE(widget))
|
||||
if (gtk_widget_get_visible(widget))
|
||||
autosep->ref_count++;
|
||||
else
|
||||
autosep->ref_count--;
|
||||
@ -2369,7 +2370,7 @@ static void on_auto_separator_item_destroy(GtkWidget *widget, gpointer user_data
|
||||
{
|
||||
GeanyAutoSeparator *autosep = user_data;
|
||||
|
||||
/* GTK_WIDGET_VISIBLE won't work now the widget is being destroyed,
|
||||
/* gtk_widget_get_visible() won't work now the widget is being destroyed,
|
||||
* so assume widget was visible */
|
||||
autosep->ref_count--;
|
||||
autosep->ref_count = MAX(autosep->ref_count, 0);
|
||||
@ -2388,7 +2389,7 @@ void ui_auto_separator_add_ref(GeanyAutoSeparator *autosep, GtkWidget *item)
|
||||
g_signal_connect(autosep->widget, "destroy",
|
||||
G_CALLBACK(gtk_widget_destroyed), &autosep->widget);
|
||||
|
||||
if (GTK_WIDGET_VISIBLE(item))
|
||||
if (gtk_widget_get_visible(item))
|
||||
{
|
||||
autosep->ref_count++;
|
||||
auto_separator_update(autosep);
|
||||
|
@ -49,6 +49,7 @@
|
||||
#include "geanywraplabel.h"
|
||||
#include "editor.h"
|
||||
#include "sciwrappers.h"
|
||||
#include "gtkcompat.h"
|
||||
|
||||
|
||||
VteInfo vte_info;
|
||||
@ -252,7 +253,7 @@ static void create_vte(void)
|
||||
|
||||
vc->vte = vte = vf->vte_terminal_new();
|
||||
scrollbar = gtk_vscrollbar_new(GTK_ADJUSTMENT(VTE_TERMINAL(vte)->adjustment));
|
||||
GTK_WIDGET_UNSET_FLAGS(scrollbar, GTK_CAN_FOCUS);
|
||||
gtk_widget_set_can_focus(scrollbar, FALSE);
|
||||
|
||||
/* create menu now so copy/paste shortcuts work */
|
||||
vc->menu = vte_create_popup_menu();
|
||||
|
Loading…
x
Reference in New Issue
Block a user