void open_url(GtkWindow *parent, const gchar * url) { #ifdef WINDOWS ShellExecute(NULL, NULL, (char *) url, NULL, ".\\", 0); #else gboolean use_browser = FALSE; if ( a_settings_get_boolean ( "use_env_browser", &use_browser ) ) { const gchar *browser = g_getenv("BROWSER"); if (browser == NULL || browser[0] == '\0') { browser = "firefox"; } if (spawn_command_line_async(browser, url)) { return; } else g_warning("Failed to run: %s on %s", browser, url); } else { GError *error = NULL; gtk_show_uri ( gtk_widget_get_screen (GTK_WIDGET(parent)), url, GDK_CURRENT_TIME, &error ); if ( error ) { a_dialog_error_msg_extra ( parent, _("Could not launch web browser. %s"), error->message ); g_error_free ( error ); } } #endif }
static void georef_layer_load_image ( VikGeorefLayer *vgl, VikViewport *vp, gboolean from_file ) { GError *gx = NULL; if ( vgl->image == NULL ) return; if ( vgl->pixbuf ) g_object_unref ( G_OBJECT(vgl->pixbuf) ); if ( vgl->scaled ) { g_object_unref ( G_OBJECT(vgl->scaled) ); vgl->scaled = NULL; } vgl->pixbuf = gdk_pixbuf_new_from_file ( vgl->image, &gx ); if (gx) { if ( !from_file ) a_dialog_error_msg_extra ( VIK_GTK_WINDOW_FROM_WIDGET(vp), _("Couldn't open image file: %s"), gx->message ); g_error_free ( gx ); } else { vgl->width = gdk_pixbuf_get_width ( vgl->pixbuf ); vgl->height = gdk_pixbuf_get_height ( vgl->pixbuf ); if ( vgl->pixbuf && vgl->alpha <= 255 ) vgl->pixbuf = ui_pixbuf_set_alpha ( vgl->pixbuf, vgl->alpha ); } /* should find length and width here too */ }
static void clip_add_wp(VikLayersPanel *vlp, struct LatLon *coord) { VikCoord vc; VikLayer *sel = vik_layers_panel_get_selected ( vlp ); vik_coord_load_from_latlon ( &vc, VIK_COORD_LATLON, coord ); if (sel && sel->type == VIK_LAYER_TRW) { vik_trw_layer_new_waypoint ( VIK_TRW_LAYER(sel), VIK_GTK_WINDOW_FROM_LAYER(sel), &vc ); } else { a_dialog_error_msg_extra ( VIK_GTK_WINDOW_FROM_WIDGET(GTK_WIDGET(vlp)), _("In order to paste a waypoint, please select an appropriate layer to paste into."), NULL); } }
static void calculate_mpp_from_coords ( GtkWidget *ww, VikGeorefLayer *vgl ) { const gchar* filename = vik_file_entry_get_filename(VIK_FILE_ENTRY(vgl->cw.imageentry)); if ( !filename ) { return; } GError *gx = NULL; GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file ( filename, &gx ); if ( gx ) { a_dialog_error_msg_extra ( VIK_GTK_WINDOW_FROM_WIDGET(ww), _("Couldn't open image file: %s"), gx->message ); g_error_free ( gx ); return; } guint width = gdk_pixbuf_get_width ( pixbuf ); guint height = gdk_pixbuf_get_height ( pixbuf ); if ( width == 0 || height == 0 ) { a_dialog_error_msg_extra ( VIK_GTK_WINDOW_FROM_WIDGET(ww), _("Invalid image size: %s"), filename); } else { align_coords ( vgl ); struct LatLon ll_tl = get_ll_tl (vgl); struct LatLon ll_br = get_ll_br (vgl); gdouble xmpp, ympp; georef_layer_mpp_from_coords ( VIK_COORD_LATLON, ll_tl, ll_br, width, height, &xmpp, &ympp ); gtk_spin_button_set_value ( GTK_SPIN_BUTTON(vgl->cw.x_spin), xmpp ); gtk_spin_button_set_value ( GTK_SPIN_BUTTON(vgl->cw.y_spin), ympp ); check_br_is_good_or_msg_user ( vgl ); } g_object_unref ( G_OBJECT(pixbuf) ); }
static void trw_layer_show_picture ( menu_array_values values ) { VikWaypoint *wpt = VIK_WAYPOINT(values[MA_WPT]); #ifdef WINDOWS ShellExecute(NULL, "open", wpt->image, NULL, NULL, SW_SHOWNORMAL); #else VikTrwLayer *vtl = VIK_TRW_LAYER(values[MA_VTL]); GError *err = NULL; gchar *quoted_file = g_shell_quote ( wpt->image ); gchar *cmd = g_strdup_printf ( "%s %s", a_vik_get_image_viewer(), quoted_file ); g_free ( quoted_file ); if ( ! g_spawn_command_line_async ( cmd, &err ) ) { a_dialog_error_msg_extra ( VIK_GTK_WINDOW_FROM_LAYER(vtl), _("Could not launch %s to open file."), a_vik_get_image_viewer() ); g_error_free ( err ); } g_free ( cmd ); #endif }
void new_email(GtkWindow *parent, const gchar * address) { gchar *uri = g_strdup_printf("mailto:%s", address); GError *error = NULL; gtk_show_uri ( gtk_widget_get_screen (GTK_WIDGET(parent)), uri, GDK_CURRENT_TIME, &error ); if ( error ) { a_dialog_error_msg_extra ( parent, _("Could not create new email. %s"), error->message ); g_error_free ( error ); } /* #ifdef WINDOWS ShellExecute(NULL, NULL, (char *) uri, NULL, ".\\", 0); #else if (!spawn_command_line_async("xdg-email", uri)) a_dialog_error_msg ( parent, _("Could not create new email.") ); #endif */ g_free(uri); uri = NULL; }
/* our own data type */ static void clip_receive_viking ( GtkClipboard *c, GtkSelectionData *sd, gpointer p ) { VikLayersPanel *vlp = p; vik_clipboard_t *vc; if (sd->length == -1) { g_warning ( _("paste failed") ); return; } // g_print("clip receive: target = %s, type = %s\n", gdk_atom_name(sd->target), gdk_atom_name(sd->type)); g_assert(!strcmp(gdk_atom_name(sd->target), target_table[0].target)); vc = (vik_clipboard_t *)sd->data; // g_print(" sd->data = %p, sd->length = %d, vc->len = %d\n", sd->data, sd->length, vc->len); if (sd->length != sizeof(*vc) + vc->len) { g_warning ( _("wrong clipboard data size") ); return; } if ( vc->type == VIK_CLIPBOARD_DATA_LAYER ) { VikLayer *new_layer = vik_layer_unmarshall ( vc->data, vc->len, vik_layers_panel_get_viewport(vlp) ); vik_layers_panel_add_layer ( vlp, new_layer ); } else if ( vc->type == VIK_CLIPBOARD_DATA_SUBLAYER ) { VikLayer *sel = vik_layers_panel_get_selected ( vlp ); if ( sel && sel->type == vc->layer_type) { if ( vik_layer_get_interface(vc->layer_type)->paste_item ) vik_layer_get_interface(vc->layer_type)->paste_item ( sel, vc->subtype, vc->data, vc->len); } else a_dialog_error_msg_extra ( VIK_GTK_WINDOW_FROM_WIDGET(GTK_WIDGET(vlp)), _("The clipboard contains sublayer data for %s layers. " "You must select a layer of this type to paste the clipboard data."), vik_layer_get_interface(vc->layer_type)->name ); } }
static void georef_layer_load_image ( VikGeorefLayer *vgl, VikViewport *vp, gboolean from_file ) { GError *gx = NULL; if ( vgl->image == NULL ) return; if ( vgl->pixbuf ) g_object_unref ( G_OBJECT(vgl->pixbuf) ); if ( vgl->scaled ) { g_object_unref ( G_OBJECT(vgl->scaled) ); vgl->scaled = NULL; } vgl->pixbuf = gdk_pixbuf_new_from_file ( vgl->image, &gx ); if (gx) { if ( !from_file ) a_dialog_error_msg_extra ( VIK_GTK_WINDOW_FROM_WIDGET(vp), _("Couldn't open image file: %s"), gx->message ); g_error_free ( gx ); } else { vgl->width = gdk_pixbuf_get_width ( vgl->pixbuf ); vgl->height = gdk_pixbuf_get_height ( vgl->pixbuf ); } if ( !from_file ) { if ( vik_viewport_get_drawmode(vp) != VIK_VIEWPORT_DRAWMODE_UTM ) { a_dialog_warning_msg ( VIK_GTK_WINDOW_FROM_WIDGET(vp), _("GeoRef map cannot be displayed in the current drawmode.\nSelect \"UTM Mode\" from View menu to view it.") ); } } /* should find length and width here too */ }