/*******************************************************************************
 * Copyright (c) 2018 Red Hat and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     Red Hat - initial API and implementation
 *******************************************************************************/
package org.eclipse.swt.tests.gtk.snippets;


//import org.eclipse.swt.internal.gtk.OS;


/*
 * NOTE: this snippet requires OS.ascii() to be public in order to function.
 * Please modify its api.visibility and uncomment the rest of the snippet.
 */

public class Bug481010_ShellSize {

	public static void main(String[] args) {
//		OS.gtk_init_check(new long[0], new long[0]);
//		/* create a new window */
//		long window = OS.gtk_window_new(OS.GTK_WINDOW_TOPLEVEL);
//		
//
//		long button = OS.gtk_button_new();
//
//		long labelHandle = OS.gtk_label_new (OS.ascii("Hello world"));
//		OS.gtk_container_add(button, labelHandle);
//		OS.gtk_container_add(window, button);
//		OS.gtk_widget_show(labelHandle);
//		OS.gtk_widget_show(button);
//		
//		OS.gtk_widget_show(window);
//		OS.gtk_window_resize(window, 400, 400);
//		
//		
//		OS.gtk_main();
	}

}
