0

I seem to be facing a problem when resizing a gtk window programatically. The problem is that once I have increased the width and height of the window to 800x600, I cannot seem to reduce it back to its original size of 400x200. Below is the sample code. Has anyone faced such a problem?

#include <gtk/gtk.h>

static gboolean is_clicked = FALSE;

static void Child_window_resize( GtkWidget *widget,
               GtkWidget *window)
{
    if(!is_clicked)
    {
        g_print("Inside If block increase bool value %d\n",is_clicked);
        gtk_widget_set_size_request(window,800,600);
        is_clicked = TRUE;
    }
    else
    {
        g_print("Inside Else block decrease bool value %d\n",is_clicked);
        gtk_widget_set_size_request(window,400,200);
        is_clicked = FALSE;
    }
}

int main(int argc, char* argv[])
{
    GtkWidget *window;
    GtkWidget *fixed;
    GtkWidget *resizebutton;

    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_set_size_request(window,400,200);
    gtk_window_set_resizable(GTK_WINDOW(window),TRUE);
    gtk_window_set_title(GTK_WINDOW(window), "Demo Resize");
    gtk_window_set_decorated(GTK_WINDOW(window),FALSE);
    gtk_signal_connect(GTK_OBJECT(window), "destroy",
                        GTK_SIGNAL_FUNC(gtk_exit), NULL);

    gtk_container_set_border_width(GTK_CONTAINER(window), 10);
    // creating a fixed GTK_CONTAINER
    fixed = gtk_fixed_new();
    gtk_container_add(GTK_CONTAINER(window),fixed);
    gtk_widget_show(fixed);

    resizebutton = gtk_button_new_with_label("Resize");
    gtk_widget_set_size_request(resizebutton, 80, 60);
    gtk_fixed_put(GTK_FIXED(fixed), resizebutton, 0, 0);

    gtk_signal_connect(GTK_OBJECT(resizebutton), "clicked",
                GTK_SIGNAL_FUNC(Child_window_resize), window);

    gtk_widget_show(resizebutton);
    gtk_widget_show(window);
    gtk_main();
    return 0;
}

Complied using ...

gcc -Wall -Werror -g resize.c -o resize -export-dynamic `pkg-config --cflags --libs gtk+-2.0 gthread-2.0`

Any help is much appreciated.

1 Answer 1

1

Instead of gtk_widget_set_size_request(), you need gtk_window_resize().

From the linked manual:

void
gtk_window_resize (GtkWindow *window,
                   gint width,
                   gint height);

Resizes the window as if the user had done so, obeying geometry constraints. The default geometry constraint is that windows may not be smaller than their size request; to override this constraint, call gtk_widget_set_size_request() to set the window's request to a smaller value.

If gtk_window_resize() is called before showing a window for the first time, it overrides any default size set with gtk_window_set_default_size().

Windows may not be resized smaller than 1 by 1 pixels.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.