static void widget_pixmap_input_by_file(variable *var, char *filename) { GdkPixbuf *pixbuf; GList *element; gint width = -1, height = -1; #ifdef DEBUG_TRANSITS fprintf(stderr, "%s(): Entering.\n", __func__); #endif if (attributeset_is_avail(var->Attributes, ATTR_WIDTH)) width = atoi(attributeset_get_first(&element, var->Attributes, ATTR_WIDTH)); if (attributeset_is_avail(var->Attributes, ATTR_HEIGHT)) height = atoi(attributeset_get_first(&element, var->Attributes, ATTR_HEIGHT)); if (width == -1 && height == -1) { /* Handle unscaled images */ gtk_image_set_from_file(GTK_IMAGE(var->Widget), find_pixmap(filename)); } else { /* Handle scaled images */ pixbuf = gdk_pixbuf_new_from_file_at_size( find_pixmap(filename), width, height, NULL); if (pixbuf) { gtk_image_set_from_pixbuf(GTK_IMAGE(var->Widget), pixbuf); /* pixbuf is no longer required and should be unreferenced */ g_object_unref(pixbuf); } else { /* pixbuf is null (file not found) so by using this * function gtk will substitute a broken image icon */ gtk_image_set_from_file(GTK_IMAGE(var->Widget), ""); } } #ifdef DEBUG_TRANSITS fprintf(stderr, "%s(): Exiting.\n", __func__); #endif }
/*********************************************************************** * Create * ***********************************************************************/ GtkWidget *widget_window_create( AttributeSet *Attr, tag_attr *attr, gint Type) { gchar *value; GError *error = NULL; GList *accel_group = NULL; GList *element; gint border_width; GtkWidget *widget; stackelement s; #ifdef DEBUG_TRANSITS fprintf(stderr, "%s(): Entering.\n", __func__); #endif /* Create the window widget */ widget = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* Set a default window title */ attributeset_set_if_unset(Attr, ATTR_LABEL, PACKAGE); gtk_window_set_title(GTK_WINDOW(widget), attributeset_get_first(&element, Attr, ATTR_LABEL)); /* Set a default title bar theme icon */ gtk_window_set_icon_name(GTK_WINDOW(widget), PACKAGE); /* If requested set a title bar image by filename */ if (attr) { if ((value = get_tag_attribute(attr, "image-name"))) gtk_window_set_icon_from_file(GTK_WINDOW(widget), find_pixmap(value), &error); } /* Set a default border width */ border_width = 5; if (attr && (value = get_tag_attribute(attr, "margin"))) /* Deprecated */ border_width = atoi(value); gtk_container_set_border_width(GTK_CONTAINER(widget), border_width); /* If we have geometry given in the command line, we set that */ if (have_geometry_dxdy) gtk_widget_set_usize(widget, geometry_dx, geometry_dy); if (have_geometry_xy) gtk_widget_set_uposition(widget, geometry_x, geometry_y); if (option_centering) gtk_window_set_position(GTK_WINDOW(widget), GTK_WIN_POS_CENTER_ALWAYS); /* Pop the widgets that the window will contain and add them */ s = pop(); gtk_container_add(GTK_CONTAINER(widget), s.widgets[0]); /* Thunor: Each menu created will have an accelerator group * for its menuitems which will require adding to the window */ if (accel_groups) { accel_group = g_list_first(accel_groups); while (accel_group) { gtk_window_add_accel_group(GTK_WINDOW(widget), GTK_ACCEL_GROUP(accel_group->data)); #ifdef DEBUG fprintf(stderr, "%s: Adding accel_group=%p to window\n", __func__, accel_group->data); #endif accel_group = accel_group->next; } g_list_free(accel_groups); accel_groups = NULL; } #ifdef DEBUG_TRANSITS fprintf(stderr, "%s(): Exiting.\n", __func__); #endif return widget; }
GtkWidget *widget_pixmap_create( AttributeSet *Attr, tag_attr *attr, gint Type) { GError *error = NULL; GList *element; GtkIconTheme *icon_theme; GtkWidget *widget = NULL; GdkPixbuf *pixbuf; gchar *act; gchar *file_name; gchar *icon_name = NULL; gchar *stock_name = NULL; gchar *value; gint width = -1, height = -1; gint theme_icon_size = 32; gint stock_icon_size = GTK_ICON_SIZE_DND; #ifdef DEBUG_TRANSITS fprintf(stderr, "%s(): Entering.\n", __func__); #endif if (attributeset_is_avail(Attr, ATTR_HEIGHT)) height = atoi(attributeset_get_first(&element, Attr, ATTR_HEIGHT)); if (attributeset_is_avail(Attr, ATTR_WIDTH)) width = atoi(attributeset_get_first(&element, Attr, ATTR_WIDTH)); /* The <input> tag... */ act = attributeset_get_first(&element, Attr, ATTR_INPUT); while (act) { #ifdef DEBUG_CONTENT fprintf(stderr, "%s(): act=%s\n", __func__, act); #endif /* input file stock = "File:", input file = "File:/path/to/file" */ if (strncasecmp(act, "file:", 5) == 0) { if ((stock_name = attributeset_get_this_tagattr(&element, Attr, ATTR_INPUT, "stock")) != NULL) { /* Get stock-icon-size (custom) */ if (attr && (value = get_tag_attribute(attr, "stock-icon-size"))) stock_icon_size = atoi(value); widget = gtk_image_new_from_stock(stock_name, stock_icon_size); break; /* Only one image is required */ } if ((icon_name = attributeset_get_this_tagattr(&element, Attr, ATTR_INPUT, "icon")) != NULL) { icon_theme = gtk_icon_theme_get_default(); /* Use the height or width dimension to override the default size */ if (height > -1) theme_icon_size = height; else if (width > -1) theme_icon_size = width; /* Get theme-icon-size (custom) */ if (attr && (value = get_tag_attribute(attr, "theme-icon-size"))) theme_icon_size = atoi(value); pixbuf = gtk_icon_theme_load_icon(icon_theme, icon_name, theme_icon_size, 0, &error); if (pixbuf) { widget = gtk_image_new_from_pixbuf(pixbuf); /* pixbuf is no longer required and should be unreferenced */ g_object_unref(pixbuf); } else { /* pixbuf is null (file not found) so by using this * function gtk will substitute a broken image icon */ widget = gtk_image_new_from_file(""); } break; /* Only one image is required */ } if (strlen(act) > 5) { file_name = act + 5; if (width == -1 && height == -1) { /* Handle unscaled images */ widget = gtk_image_new_from_file(find_pixmap(file_name)); } else { /* Handle scaled images */ pixbuf = gdk_pixbuf_new_from_file_at_size( find_pixmap(file_name), width, height, NULL); if (pixbuf) { widget = gtk_image_new_from_pixbuf(pixbuf); /* pixbuf is no longer required and should be unreferenced */ g_object_unref(pixbuf); } else { /* pixbuf is null (file not found) so by using this * function gtk will substitute a broken image icon */ widget = gtk_image_new_from_file(""); } } break; /* Only one image is required */ } } act = attributeset_get_next(&element, Attr, ATTR_INPUT); } if (widget == NULL) { /* No input file directive found so by using this * function gtk will substitute a broken image icon */ widget = gtk_image_new_from_file(""); } #ifdef DEBUG_TRANSITS fprintf(stderr, "%s(): Exiting.\n", __func__); #endif return widget; }