summaryrefslogtreecommitdiff
path: root/src/emacsgtkfixed.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emacsgtkfixed.c')
-rw-r--r--src/emacsgtkfixed.c117
1 files changed, 27 insertions, 90 deletions
diff --git a/src/emacsgtkfixed.c b/src/emacsgtkfixed.c
index 996ded2acaa..bd365004ad6 100644
--- a/src/emacsgtkfixed.c
+++ b/src/emacsgtkfixed.c
@@ -22,8 +22,11 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include "lisp.h"
#include "frame.h"
+#ifdef HAVE_PGTK
+#include "pgtkterm.h"
+#else
#include "xterm.h"
-#include "xwidget.h"
+#endif
#include "emacsgtkfixed.h"
/* Silence a bogus diagnostic; see GNOME bug 683906. */
@@ -47,7 +50,9 @@ static void emacs_fixed_get_preferred_width (GtkWidget *widget,
static void emacs_fixed_get_preferred_height (GtkWidget *widget,
gint *minimum,
gint *natural);
+#ifndef HAVE_PGTK
static GType emacs_fixed_get_type (void);
+#endif
G_DEFINE_TYPE (EmacsFixed, emacs_fixed, GTK_TYPE_FIXED)
static EmacsFixed *
@@ -57,92 +62,6 @@ EMACS_FIXED (GtkWidget *widget)
EmacsFixed);
}
-#ifdef HAVE_XWIDGETS
-
-static EmacsFixedClass *
-EMACS_FIXED_GET_CLASS (GtkWidget *widget)
-{
- return G_TYPE_INSTANCE_GET_CLASS (widget, emacs_fixed_get_type (),
- EmacsFixedClass);
-}
-
-struct GtkFixedPrivateL
-{
- GList *children;
-};
-
-static void
-emacs_fixed_gtk_widget_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation)
-{
- /* For xwidgets.
-
- This basically re-implements the base class method and adds an
- additional case for an xwidget view.
-
- It would be nicer if the bse class method could be called first,
- and the xview modification only would remain here. It wasn't
- possible to solve it that way yet. */
- EmacsFixedClass *klass;
- GtkWidgetClass *parent_class;
- struct GtkFixedPrivateL *priv;
-
- klass = EMACS_FIXED_GET_CLASS (widget);
- parent_class = g_type_class_peek_parent (klass);
- parent_class->size_allocate (widget, allocation);
-
- priv = G_TYPE_INSTANCE_GET_PRIVATE (widget, GTK_TYPE_FIXED,
- struct GtkFixedPrivateL);
-
- gtk_widget_set_allocation (widget, allocation);
-
- if (gtk_widget_get_has_window (widget))
- {
- if (gtk_widget_get_realized (widget))
- gdk_window_move_resize (gtk_widget_get_window (widget),
- allocation->x,
- allocation->y,
- allocation->width,
- allocation->height);
- }
-
- for (GList *children = priv->children; children; children = children->next)
- {
- GtkFixedChild *child = children->data;
-
- if (!gtk_widget_get_visible (child->widget))
- continue;
-
- GtkRequisition child_requisition;
- gtk_widget_get_preferred_size (child->widget, &child_requisition, NULL);
-
- GtkAllocation child_allocation;
- child_allocation.x = child->x;
- child_allocation.y = child->y;
-
- if (!gtk_widget_get_has_window (widget))
- {
- child_allocation.x += allocation->x;
- child_allocation.y += allocation->y;
- }
-
- child_allocation.width = child_requisition.width;
- child_allocation.height = child_requisition.height;
-
- struct xwidget_view *xv
- = g_object_get_data (G_OBJECT (child->widget), XG_XWIDGET_VIEW);
- if (xv)
- {
- child_allocation.width = xv->clip_right;
- child_allocation.height = xv->clip_bottom - xv->clip_top;
- }
-
- gtk_widget_size_allocate (child->widget, &child_allocation);
- }
-}
-
-#endif /* HAVE_XWIDGETS */
-
static void
emacs_fixed_class_init (EmacsFixedClass *klass)
{
@@ -152,9 +71,6 @@ emacs_fixed_class_init (EmacsFixedClass *klass)
widget_class->get_preferred_width = emacs_fixed_get_preferred_width;
widget_class->get_preferred_height = emacs_fixed_get_preferred_height;
-#ifdef HAVE_XWIDGETS
- widget_class->size_allocate = emacs_fixed_gtk_widget_size_allocate;
-#endif
g_type_class_add_private (klass, sizeof (EmacsFixedPrivate));
}
@@ -182,9 +98,15 @@ emacs_fixed_get_preferred_width (GtkWidget *widget,
{
EmacsFixed *fixed = EMACS_FIXED (widget);
EmacsFixedPrivate *priv = fixed->priv;
+#ifdef HAVE_PGTK
+ int w = priv->f->output_data.pgtk->size_hints.min_width;
+ if (minimum) *minimum = w;
+ if (natural) *natural = priv->f->output_data.pgtk->preferred_width;
+#else
int w = priv->f->output_data.x->size_hints.min_width;
if (minimum) *minimum = w;
if (natural) *natural = w;
+#endif
}
static void
@@ -194,12 +116,20 @@ emacs_fixed_get_preferred_height (GtkWidget *widget,
{
EmacsFixed *fixed = EMACS_FIXED (widget);
EmacsFixedPrivate *priv = fixed->priv;
+#ifdef HAVE_PGTK
+ int h = priv->f->output_data.pgtk->size_hints.min_height;
+ if (minimum) *minimum = h;
+ if (natural) *natural = priv->f->output_data.pgtk->preferred_height;
+#else
int h = priv->f->output_data.x->size_hints.min_height;
if (minimum) *minimum = h;
if (natural) *natural = h;
+#endif
}
+#ifndef HAVE_PGTK
+
/* Override the X function so we can intercept Gtk+ 3 calls.
Use our values for min_width/height so that KDE don't freak out
(Bug#8919), and so users can resize our frames as they wish. */
@@ -234,8 +164,13 @@ XSetWMSizeHints (Display *d,
if ((hints->flags & PMinSize) && f)
{
+#ifdef HAVE_PGTK
+ int w = f->output_data.pgtk->size_hints.min_width;
+ int h = f->output_data.pgtk->size_hints.min_height;
+#else
int w = f->output_data.x->size_hints.min_width;
int h = f->output_data.x->size_hints.min_height;
+#endif
data[5] = w;
data[6] = h;
}
@@ -253,3 +188,5 @@ XSetWMNormalHints (Display *d, Window w, XSizeHints *hints)
{
XSetWMSizeHints (d, w, hints, XA_WM_NORMAL_HINTS);
}
+
+#endif