Patent Publication Number: US-8527891-B2

Title: Enabling user interactions between user interface components

Description:
FIELD 
     The subject matter disclosed herein relates to user interface components and more particularly relates to user interactions between user interface components. 
     BACKGROUND 
     Description of the Related Art 
     Many different frameworks exist for providing user interfaces to computer users. Often, several different user interface frameworks exist on a single computer, within the same operating system. Different user interface frameworks can each simultaneously present shells or windows to a user on the same desktop or screen. 
     Different user interface frameworks typically do not allow user interactions between them. Similarly, even different software applications using the same user interface framework may not support user interactions between the different software applications, or may not implement each possible type of user interaction supported by a user interface framework. Even a single software application may use multiple user interface frameworks simultaneously, making seamless user interaction between parts of the single software application difficult. 
     BRIEF SUMMARY 
     From the foregoing discussion, it should be apparent that a need exists for an apparatus, method, and computer program product that enable user interactions between user interface components. Beneficially, such an apparatus, method, and computer program product would provide a seamless interface for a user to interact between different user interface components. 
     The present invention has been developed in response to the present state of the art, and in particular, in response to the problems and needs in the art that have not yet been fully solved by currently available user interfaces. Accordingly, the present invention has been developed to provide an apparatus, method, and computer program product for enabling user interactions that overcome many or all of the above-discussed shortcomings in the art. 
     The apparatus to enable user interactions is provided with a plurality of modules configured to functionally execute the necessary steps of enabling user interactions between user interface components. These modules in the described embodiments include an initial event module, a transparent component module, an interaction event module, and an interaction communication module. 
     In one embodiment, the initial event module detects an initial user input event to a graphical user interface (“GUI”). The initial user input event, in a further embodiment, is associated with a user interaction between a source user interface component and a target user interface component. The source user interface component and the target user interface component, in another embodiment, are displayed in the GUI. The source user interface component and the target user interface component, in one embodiment, occupy separate event domains. 
     In one embodiment, the transparent component module places a transparent user interface component over the target user interface component in response to the initial user input event. The transparent user interface component, in a further embodiment, occupies the same event domain as the source user interface component. 
     In one embodiment, the interaction event module detects an interaction user input event to the transparent user interface component. The interaction user input event, in one embodiment, continues the user interaction between the source user interface component and the target user interface component. 
     In one embodiment, the interaction communication module communicates information of the user interaction to the target user interface component. The interaction communication module, in a further embodiment, communicates the information of the user interaction using a communications channel supported by the target user interface. 
     A method of the present invention is also presented for enabling user interactions between user interface components. The method in the disclosed embodiments substantially includes the steps necessary to carry out the functions presented above with respect to the operation of the described apparatus. 
     In one embodiment, the method includes detecting an initial user input event to a GUI. The initial user input event, in a further embodiment, is associated with a user interaction between a source user interface component and a target user interface component. The source user interface component and the target user interface component, in another embodiment, are displayed in the GUI. In an additional embodiment, the source user interface component and the target user interface component occupy separate event domains. 
     The method, in one embodiment, includes placing a transparent user interface component over the target user interface component in response to the initial user input event. The transparent user interface component, in another embodiment, occupies the same event domain as the source user interface component. 
     In a further embodiment, the method includes detecting an interaction user input event to the transparent user interface component. The interaction user input event, in one embodiment, continues the user interaction between the source user interface component and the target user interface component. The method, in another embodiment, includes communicating information of the user interaction to the target user interface component using a communications channel supported by the target user interface. 
     A computer program product of the present invention is also presented. The computer program product includes a computer readable storage medium with computer readable program code that is executable to perform operations for enabling user interactions between user interface components. In one embodiment, the operations include detecting an initial user input event to a GUI. The initial user input event, in a further embodiment, is associated with a user interaction between a source user interface component and a target user interface component. The source user interface component and the target user interface component, in another embodiment, are displayed in the GUI. In an additional embodiment, the source user interface component and the target user interface component occupy separate event domains. 
     The operations, in another embodiment, include placing a transparent user interface component over the target user interface component in response to the initial user input event. The transparent user interface component, in another embodiment, occupies the same event domain as the source user interface component. In an additional embodiment, the operations include detecting an interaction user input event to the transparent user interface component. The interaction user input event, in one embodiment, continues the user interaction between the source user interface component and the target user interface component. The operations, in a further embodiment, include communicating information of the user interaction to the target user interface component using a communications channel supported by the target user interface. 
     An additional apparatus to enable user interactions is provided with a plurality of modules configured to functionally execute the necessary steps described above with regard to the apparatus, method, and computer program product. These modules in the described embodiments include an initial event module, a transparent component module, an interaction event module, a removal module, a translation module, and an interaction communication module. 
     In one embodiment, the initial event module detects an initial user input event to a GUI. The initial user input event, in a further embodiment, is associated with a user interaction between a source software application shell and a target software application shell. The source software application shell and the target software application shell, in another embodiment, are displayed in the GUI. The source software application shell and the target software application shell, in one embodiment, occupy separate event domains. 
     In one embodiment, the transparent component module places an invisible software application shell over the target software application shell in response to the initial user input event. The invisible software application shell, in a further embodiment, occupies the same event domain as the source software application shell. In one embodiment, the interaction event module detects an interaction user input event to the transparent software application shell. The interaction user input event, in one embodiment, continues the user interaction between the source software application shell and the target software application shell. 
     In one embodiment, the removal module removes the invisible software application shell from the target software application shell in response to the interaction user input event. The translation module, in one embodiment, determines information of the user interaction by translating the initialization user input event and/or the interaction user input event into a format that the target software application shell supports. 
     In one embodiment, the interaction communication module communicates the information of the user interaction to the target software application shell. The interaction communication module, in a further embodiment, communicates the information of the user interaction using a communications channel supported by the target user interface. 
     The user interaction between the source software application shell and the target software application shell, in one embodiment, includes a drag-and-drop user interaction. In a further embodiment, the initial user input event includes dragging an item from the source software application shell. In another embodiment, the interaction user input event includes dropping the item over the target software application shell. In one embodiment, the invisible software application shell intercepts the interaction user input event. 
     References throughout this specification to features, advantages, or similar language do not imply that all of the features and advantages may be realized in any single embodiment. Rather, language referring to the features and advantages is understood to mean that a specific feature, advantage, or characteristic is included in at least one embodiment. Thus, discussion of the features and advantages, and similar language, throughout this specification may, but do not necessarily, refer to the same embodiment. 
     Furthermore, the described features, advantages, and characteristics of the embodiments may be combined in any suitable manner. One skilled in the relevant art will recognize that the embodiments may be practiced without one or more of the specific features or advantages of a particular embodiment. In other instances, additional features and advantages may be recognized in certain embodiments that may not be present in all embodiments. 
     These features and advantages of the embodiments will become more fully apparent from the following description and appended claims, or may be learned by the practice of embodiments as set forth hereinafter. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       In order that the advantages of the embodiments of the invention will be readily understood, a more particular description of the embodiments briefly described above will be rendered by reference to specific embodiments that are illustrated in the appended drawings. Understanding that these drawings depict only some embodiments and are not therefore to be considered to be limiting of scope, the embodiments will be described and explained with additional specificity and detail through the use of the accompanying drawings, in which: 
         FIG. 1  is a schematic block diagram illustrating one embodiment of a system for enabling user interactions between user interface components in accordance with the present invention; 
         FIG. 2  is a schematic block diagram illustrating one embodiment of a GUI component interaction module in accordance with the present invention; 
         FIG. 3  is a schematic block diagram illustrating another embodiment of a GUI component interaction module in accordance with the present invention; 
         FIG. 4  is a schematic block diagram illustrating one embodiment of a drag-and-drop user interaction in accordance with the present invention; 
         FIG. 5  is a schematic block diagram illustrating one embodiment of a palette selection user interaction in accordance with the present invention; 
         FIG. 6  is a schematic flow chart diagram illustrating one embodiment of a method for enabling user interactions between user interface components in accordance with the present invention; and 
         FIG. 7  is a schematic flow chart diagram illustrating another embodiment of a method for enabling user interactions between user interface components in accordance with the present invention. 
     
    
    
     DETAILED DESCRIPTION 
     As will be appreciated by one skilled in the art, aspects of the present invention may be embodied as a system, method or computer program product. Accordingly, aspects of the present invention may take the form of an entirely hardware embodiment, an entirely software embodiment (including firmware, resident software, micro-code, etc.) or an embodiment combining software and hardware aspects that may all generally be referred to herein as a “circuit,” “module” or “system.” Furthermore, aspects of the present invention may take the form of a computer program product embodied in one or more computer readable medium(s) having computer readable program code embodied thereon. 
     Many of the functional units described in this specification have been labeled as modules, in order to more particularly emphasize their implementation independence. For example, a module may be implemented as a hardware circuit comprising custom VLSI circuits or gate arrays, off-the-shelf semiconductors such as logic chips, transistors, or other discrete components. A module may also be implemented in programmable hardware devices such as field programmable gate arrays, programmable array logic, programmable logic devices or the like. 
     Modules may also be implemented in software for execution by various types of processors. An identified module of computer readable program code may, for instance, comprise one or more physical or logical blocks of computer instructions which may, for instance, be organized as an object, procedure, or function. Nevertheless, the executables of an identified module need not be physically located together, but may comprise disparate instructions stored in different locations which, when joined logically together, comprise the module and achieve the stated purpose for the module. 
     Indeed, a module of computer readable program code may be a single instruction, or many instructions, and may even be distributed over several different code segments, among different programs, and across several memory devices. Similarly, operational data may be identified and illustrated herein within modules, and may be embodied in any suitable form and organized within any suitable type of data structure. The operational data may be collected as a single data set, or may be distributed over different locations including over different storage devices, and may exist, at least partially, merely as electronic signals on a system or network. Where a module or portions of a module are implemented in software, the computer readable program code may be stored and/or propagated on in one or more computer readable medium(s). 
     The computer readable medium may be a tangible computer readable storage medium storing the computer readable program code. The computer readable storage medium may be, for example, but not limited to, an electronic, magnetic, optical, electromagnetic, infrared, holographic, micromechanical, or semiconductor system, apparatus, or device, or any suitable combination of the foregoing. 
     More specific examples of the computer readable medium may include but are not limited to a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), a portable compact disc read-only memory (CD-ROM), a digital versatile disc (DVD), an optical storage device, a magnetic storage device, a holographic storage medium, a micromechanical storage device, or any suitable combination of the foregoing. In the context of this document, a computer readable storage medium may be any tangible medium that can contain, and/or store computer readable program code for use by and/or in connection with an instruction execution system, apparatus, or device. 
     The computer readable medium may also be a computer readable signal medium. A computer readable signal medium may include a propagated data signal with computer readable program code embodied therein, for example, in baseband or as part of a carrier wave. Such a propagated signal may take any of a variety of forms, including, but not limited to, electrical, electro-magnetic, magnetic, optical, or any suitable combination thereof. A computer readable signal medium may be any computer readable medium that is not a computer readable storage medium and that can communicate, propagate, or transport computer readable program code for use by or in connection with an instruction execution system, apparatus, or device. Computer readable program code embodied on a computer readable signal medium may be transmitted using any appropriate medium, including but not limited to wireless, wireline, optical fiber cable, Radio Frequency (RF), or the like, or any suitable combination of the foregoing. 
     In one embodiment, the computer readable medium may comprise a combination of one or more computer readable storage mediums and one or more computer readable signal mediums. For example, computer readable program code may be both propagated as an electro-magnetic signal through a fiber optic cable for execution by a processor and stored on RAM storage device for execution by the processor. 
     Computer readable program code for carrying out operations for aspects of the present invention may be written in any combination of one or more programming languages, including an object oriented programming language such as Java, Smalltalk, C++ or the like and conventional procedural programming languages, such as the “C” programming language or similar programming languages. The computer readable program code may execute entirely on the user&#39;s computer, partly on the user&#39;s computer, as a stand-alone software package, partly on the user&#39;s computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user&#39;s computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider). 
     Reference throughout this specification to “one embodiment,” “an embodiment,” or similar language means that a particular feature, structure, or characteristic described in connection with the embodiment is included in at least one embodiment. Thus, appearances of the phrases “in one embodiment,” “in an embodiment,” and similar language throughout this specification may, but do not necessarily, all refer to the same embodiment, but mean “one or more but not all embodiments” unless expressly specified otherwise. The terms “including,” “comprising,” “having,” and variations thereof mean “including but not limited to,” unless expressly specified otherwise. An enumerated listing of items does not imply that any or all of the items are mutually exclusive, unless expressly specified otherwise. The terms “a,” “an,” and “the” also refer to “one or more” unless expressly specified otherwise. 
     Furthermore, the described features, structures, or characteristics of the embodiments may be combined in any suitable manner. In the following description, numerous specific details are provided, such as examples of programming, software modules, user selections, network transactions, database queries, database structures, hardware modules, hardware circuits, hardware chips, etc., to provide a thorough understanding of embodiments. One skilled in the relevant art will recognize, however, that embodiments may be practiced without one or more of the specific details, or with other methods, components, materials, and so forth. In other instances, well-known structures, materials, or operations are not shown or described in detail to avoid obscuring aspects of an embodiment. 
     Aspects of the embodiments are described below with reference to schematic flowchart diagrams and/or schematic block diagrams of methods, apparatuses, systems, and computer program products according to embodiments of the invention. It will be understood that each block of the schematic flowchart diagrams and/or schematic block diagrams, and combinations of blocks in the schematic flowchart diagrams and/or schematic block diagrams, can be implemented by computer readable program code. These computer readable program code may be provided to a processor of a general purpose computer, special purpose computer, sequencer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the schematic flowchart diagrams and/or schematic block diagrams block or blocks. 
     The computer readable program code may also be stored in a computer readable medium that can direct a computer, other programmable data processing apparatus, or other devices to function in a particular manner, such that the instructions stored in the computer readable medium produce an article of manufacture including instructions which implement the function/act specified in the schematic flowchart diagrams and/or schematic block diagrams block or blocks. 
     The computer readable program code may also be loaded onto a computer, other programmable data processing apparatus, or other devices to cause a series of operational steps to be performed on the computer, other programmable apparatus or other devices to produce a computer implemented process such that the program code which execute on the computer or other programmable apparatus provide processes for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks. 
     The schematic flowchart diagrams and/or schematic block diagrams in the Figures illustrate the architecture, functionality, and operation of possible implementations of apparatuses, systems, methods and computer program products according to various embodiments of the present invention. In this regard, each block in the schematic flowchart diagrams and/or schematic block diagrams may represent a module, segment, or portion of code, which comprises one or more executable instructions of the program code for implementing the specified logical function(s). 
     It should also be noted that, in some alternative implementations, the functions noted in the block may occur out of the order noted in the Figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. Other steps and methods may be conceived that are equivalent in function, logic, or effect to one or more blocks, or portions thereof, of the illustrated Figures. 
     Although various arrow types and line types may be employed in the flowchart and/or block diagrams, they are understood not to limit the scope of the corresponding embodiments. Indeed, some arrows or other connectors may be used to indicate only the logical flow of the depicted embodiment. For instance, an arrow may indicate a waiting or monitoring period of unspecified duration between enumerated steps of the depicted embodiment. It will also be noted that each block of the block diagrams and/or flowchart diagrams, and combinations of blocks in the block diagrams and/or flowchart diagrams, can be implemented by special purpose hardware-based systems that perform the specified functions or acts, or combinations of special purpose hardware and computer readable program code. 
       FIG. 1  depicts one embodiment of a system  100  for enabling user interactions between user interface components  112 ,  114 . In the depicted embodiment, the system includes a display device  102  that visually displays a graphical user interface (“GUI”)  110  to a user  108 . A computing device  104 , in the depicted embodiment, provides the GUI  110  to the display device  102 . In the depicted embodiment, the computing device  104  includes a GUI component interaction module  124 . The computing device  104 , in the depicted embodiment, receives input from the user  108  through a user input device  106  and is in communication with a remote computing device  130  over a data network  128 . 
     The system  100 , in one embodiment, enables the user  108  to interact between a source user interface component  112  displayed in the GUI  110  and a target user interface component  114 , even if the source user interface component  112  and the target user interface component  114  occupy different event domains. An event domain, in one embodiment, is a subset of the GUI  110  that receives user input events that are inaccessible to other event domains of the GUI  110 . 
     In one embodiment, the system  100  places a transparent user interface component  116  over the target user interface component  114  to intercept user input to the target user interface component  114 . The transparent user interface component  116 , in one embodiment, is in the same event domain as the source user interface component  112 , so that the transparent user interface component  116  intercepts a user interaction between the source user interface component  112  and the target user interface component  114 . The system  100 , in one embodiment, communicates the user interaction to the target user interface component  114  over a communications channel  118  that the target user interface component  114  supports. In one embodiment, the transparent user interface component  116  is invisible and the user interaction interception by the transparent user interface component  116  is undetectable by the user  108 . 
     In the depicted embodiment, the display device  102  visually displays the GUI  110  to the user  108 . The display device  102 , in one embodiment, is an electronic display, such as a liquid crystal display (“LCD”), an inorganic or organic light emitting diode (“LED”) display, a cathode ray tube (“CRT”) display, a plasma display, a projector, a field emission display (“FED”), a surface conduction electron emitter display (“SED”), an electronic paper display, a laser display, and/or another type of electronic display. 
     In the depicted embodiment, the display device  102  is in communication with the computing device  104  over a display connection  126 . The computing device  104 , in one embodiment, provides the display device  102  with an image signal using the display connection  126 . The image signal, in one embodiment, is an analog or digital electric signal representing the GUI  110 . In various embodiments, the display connection  126  may include a video graphics array (“VGA”) connection, a digital visual interface (“DVI”) connection, a high-definition multimedia interface (“HDMI”) connection, a DisplayPort connection, a low-voltage differential signaling (“LVDS”) connection, a universal serial bus (“USB”) connection, an IEEE 1394 (“FireWire”) connection, a direct wire connection, a proprietary connection, or another type of display connection. 
     In one embodiment, the computing device  104  includes one or more computing components, such as a processor, one or more computer readable mediums, a graphics adapter for driving the display device  102 , a wired and/or wireless network interface card for communications over the data network  128 , one or more user input devices  106 , and/or other computing components. In one embodiment, the display device  102  is integrated with the computing device  104 . The computing device  104 , in various embodiments, may be embodied by a desktop computer, a laptop computer, a server computer, a thin client computer, a tablet computer, a mobile telephone, a mobile entertainment device, an e-book reader, and/or another computing device. 
     In the depicted embodiment, the computing device  104  includes a user input device  106 . The user input device  106 , in the depicted embodiment, is illustrated as a computer mouse. In other embodiments, the user input device  106  may include a computer keyboard, a touchpad, a touchscreen, a joystick, a pointing stick, a trackball, an accelerometer-based user input device, a gyroscope-based user input device, an optical user input device, one or more buttons, one or more switches, one or more knobs, one or more rockers, and/or other types of user input devices allowing the user  108  to provide user input to the computing device  104 . 
     In one embodiment, the computing device  104  includes an operating system, firmware, software, hardware, or the like that provides the GUI  110 . The GUI  110 , in one embodiment, includes a visual representation displayed on a screen of the display device  102  and a logical framework that provides software application integration with the GUI  110 . The logical framework of the GUI  110 , in one embodiment, allows software applications to place user interface components in the visual representation of the GUI  110  on the screen of the display device  102  and to receive user input events associated with the user interface components. The GUI  110 , in one embodiment, includes or is part of a desktop environment, a window manager, and/or another graphical environment. 
     A user interface component, in one embodiment, may include an item for display in the GUI  110 , such as a shell, a window, a menu, a dialogue box, a widget, an icon, an image, a video, and/or another object displayable in the GUI  110 . A software application shell, in one embodiment, includes a region of the GUI  110  that receives user input events. In one embodiment, a software application shell includes an outer layer or top level interface between the user  108  and an associated software application. 
     A user interface component, in a further embodiment, may include an item that is logically associated with the GUI  110 , but the GUI  110  may not visibly display the component to the user  108 , or the GUI  110  may display a portion of the component. For example, in various embodiments, a user interface component may be partially or completely transparent, may be covered by another user interface component, may be logically disposed off of an edge of the screen of the display device  102 , may be a part of the framework of the GUI  110  without being displayed by the GUI  110 , and/or may be otherwise associated with the GUI  110  without being fully displayed by the GUI  110 . In a further embodiment, a user interface component may include one or more other user interface components as subcomponents visually displayed or otherwise embedded within the user interface component. 
     A user input event, in one embodiment, is a predefined user interaction with a user interface component. In one embodiment, the GUI  110  detects user input events. User input events, in various embodiments, may include selection of a user interface component or subcomponent, clicking a button, releasing a button, pressing a key, releasing a key, moving or otherwise manipulating a user input device  106 , a predefined user movement, and/or another predefined user interaction. A user input event, in one embodiment, includes a sequence of predefined user interactions or separate user input events. A user input event, in a further embodiment, may be defined relative to a specific user interface component or type of user interface component, such as dragging an icon or scrollbar, pressing a button, selecting a menu item, or the like. 
     In the depicted embodiment, the GUI  110  includes a pointer  122 . The pointer  122 , in one embodiment, visually represents input from the user  108 . In a further embodiment, the GUI  110  moves the pointer  122  in response to the user  108  manipulating the user input device  106 . The pointer  122 , in one embodiment, facilitates interaction between the user  108  and user interface components in the GUI  110 . The pointer  122 , in one embodiment, includes a visual representation in the GUI  110 , such as an arrow, a hand, an hourglass, a cursor, an I-beam, or the like indicating a position of the pointer  122  in the GUI  110 . In a further embodiment, a position of the pointer  122  may be indicated by a position that the user  108  touches, on a touchscreen or another touch sensitive user input device  106 , with or without a visual representation of the pointer  122 . 
     In one embodiment, a user input event may be defined relative to the pointer  122 . A user input event, in various embodiments, may be defined relative to a position or location of the pointer  122  in the GUI  110 , a predefined movement or gesture of the pointer  122 , pressing and/or releasing a button during a predefined movement of the pointer  122 , and/or other user input events relative the pointer  122 . 
     In the depicted embodiment, the GUI  110  includes a source user interface component  112  and a target user interface component  114 . In one embodiment, the source user interface component  112  and the target user interface component  114  each include a software application shell that the GUI  110  visibly displays. The source user interface component  112  and the target user interface component  114 , in the depicted embodiment, each include a software application window visible in the GUI  110 . In a further embodiment, the target user interface component  114  may be displayed within the source user interface component  112 , or vice versa. For example, in one embodiment, the target user interface component  114  may include a shell from one software application that is embedded in the source user interface component  112  from another software application, such as a software application with an embedded web browser, or the like. In a further embodiment, the source user interface component  112  and the target user interface component  114  each include a separate shell from the same software application. 
     The source user interface component  112  and the target user interface component  114 , in one embodiment, each occupy a separate event domain. As described above, in one embodiment, an event domain is a subset of the GUI  110  that receives user input events that are inaccessible to other event domains of the GUI  110 . Because the source user interface component  112  and the target user interface component  114  occupy separate event domains, in one embodiment, user input to one of the source user interface component  112  and the target user interface component  114  is not directly accessible or available to the other user interface component. 
     The source user interface component  112  and the target user interface component  114  may occupy separate event domains for various reasons. In one embodiment, the source user interface component  112  and the target user interface component  114  may be shells from different software applications running on the computing device  104  that do not communicate with each other or communicate in a limited manner. In another embodiment, the source user interface component  112  and the target user interface component  114  may be shells from a single software application in separate event domains, such as shells using different interfaces or versions of the GUI  110 , a graphical shell of the GUI  110  and a command line interface (“CLI”) shell of the GUI  110 , shells that support different levels of user interaction, or the like. 
     In a further embodiment, the source user interface component  112  and the target user interface component  114  may be from software applications running in different environments. For example, in one embodiment, the source user interface component  112  may be associated with the computing device  104  and the target user interface component  114  may be associated with a remote connection to the remote computing device  130  over the data network  128 , or vice versa. In another embodiment, the source interface component  112  may be associated with a host operating system of the computing device  104  and the target interface component  114  may be associated with a virtual operating system running on the computing device  104 , the source user interface component  112  and the target user interface component  114  may each be associated with different virtual operating systems on the computing device  104 , or the like. 
     In one embodiment, at least one of the source user interface component  112  and the target user interface component  114  is associated with a remote computing device  130 . For example, one or both of the source user interface component  112  and the target user interface component  114  include a software application shell associated with a remote desktop connection, a secure shell (“SSH”) connection, an application sharing connection, a screen sharing connection, a virtual network computing (“VNC”) connection, a telnet connection, and/or another remote connection with a remote computing device  130  over the data network  128 . The source user interface component  112  and the target user interface component  114 , in one embodiment, occupy separate event domains because they are associated with different computing devices, such as the computing device  104  and the remote computing device  130 , two remote computing devices  130 , or the like. 
     In the depicted embodiment, the source user interface component  112  includes one or more items  120 . The one or more items  120 , in one embodiment, each include a user interface subcomponent, such as an icon, a menu item, a check box, a dropdown menu, a radio button, a selection palette, text, a hyperlink, an image, a text input box, a widget, a button, a tab, and/or another user interface component. In one embodiment, the GUI  110  allows the user  108  to interact with the one or more items  120  using the user input device  106 , or the like. An item  120 , in one embodiment, may be associated with a data structure, a file, a program, a format, a characteristic, or the like. For example, an icon may visually represent a file or an application, a selection palette or a menu may include several colors, patterns, formatting options, or the like for selection by the user  108 , a dropdown menu may include options associated with a data structure, or the like. 
     In the depicted embodiment, the target user interface component  114  provides a communications channel  118  which the GUI component interaction module  124 , the source user interface component  112 , or the like may use to communicate information to the target user interface component  114 . The communications channel  118 , in one embodiment, is supported by the target user interface component  114  and known to the GUI component interaction module  124  and/or the source user interface component  112 . Examples of the communications channel  118 , in various embodiments, include an application programming interface (“API”) of the target user interface component  114 , a supported communications format, a supported command format, a supported file format, a supported protocol, a supported language, or the like. In one embodiment, the target user interface component  114  includes a web application that provides an external interface API, or the like, that the GUI component interaction module  124  and/or the source user interface component  112  may access using hyper text transfer protocol (“HTTP”), JavaScript, another API call, or the like. 
     In the depicted embodiment, the computing device  104  includes the GUI component interaction module  124 . Additional embodiments of the GUI component interaction module  124  are described in greater detail with regard to  FIGS. 2 and 3 . In one embodiment, the GUI component interaction module  124  enables user interactions between the source user interface component  112  and the target user interface component  114 . The GUI component interaction module  124 , in one embodiment, is part of a software application associated with the source user interface component  112 . In a further embodiment, the GUI component interaction module  124  is part of the software framework of the GUI  110 . 
     In the depicted embodiment, the GUI component interaction module  124  enables user interactions between the source user interface component  112  and the target user interface component  114  by placing a transparent user interface component  116  over the target user interface component  114  to intercept one or more user interactions. In one embodiment, the transparent user interface component  116  occupies the same event domain as the source user interface component  112 . The GUI component interaction module  124 , in one embodiment, places the transparent user interface component  116  over the target user interface component  114  at a beginning of a user interaction and removes the transparent user interface component  116  at an end of the user interaction. The transparent user interface component  116 , in one embodiment, is a shell of a software application associated with the source user interface component  116 . 
     In one embodiment, the transparent user interface component  116  is partially or fully transparent in the GUI  110  so that the target user interface component  114  is visible in the GUI  110  beneath the transparent user interface component  116 . In a further embodiment, the transparent user interface component  116  is invisible in the GUI  110  and substantially imperceptible to the user  108  in the GUI  110 . The GUI component interaction module  124 , in one embodiment, communicates information of the intercepted user interaction to the target user interface component  114  using the communications channel  118 . 
     The target user interface component  114 , in one embodiment, does not directly support the user interaction with the source user interface component  112  without the GUI component interaction module  124  and the transparent user interface component  116 . In a further embodiment, the target user interface component  114  does not directly support the user interaction because the source user interface component  112  and the target user interface component  114  occupy separate event domains. 
     One example embodiment of a user interaction between the source user interface component  112  and the target user interface component  114  is a drag-and-drop user interaction where the user  108  drags an item  120  from the source user interface component  112  and drops the item  120  over the target user interface component  114 . In one embodiment, the GUI component interaction module  124  places the transparent user interface component  116  over the target user interface component  114  toward a beginning of the drag-and-drop user interaction, intercepts the “drop” of the item  120  over the target user interface component  114 , and communicates information of the drag-and-drop user interaction to the target user interface component  114  using the communications channel  118 . In a further embodiment, the GUI component interaction module  124  removes the transparent user interface component  116  from the GUI  110  toward an end of the drag-and-drop user interaction. 
       FIG. 2  depicts one embodiment of the GUI component interaction module  124 . In the depicted embodiment, the GUI component interaction module  124  includes an initial event module  202 , a transparent component module  204 , an interaction event module  206 , and an interaction communication module  208 . The GUI component interaction module  124 , in one embodiment, is substantially similar to the GUI component interaction module  124  described above with regard to  FIG. 1 . 
     In one embodiment, the initial event module  202  detects an initial user input event to the GUI  110 . The initial user input event, in one embodiment, is associated with a user interaction between the source user interface component  112  and the target user interface component  114 . In a further embodiment, the initial user input event is associated with a beginning or initial input of a user interaction. The initial user input event, in one embodiment, includes a user input to the source user interface component  112 , such as a selection, manipulation, or another user input to an item  120  of the source user interface component  112 . 
     The initial event module  202 , in one embodiment, detects several different types of initial user input events. In a further embodiment, different initial user input events may be associated with different user interactions. In one embodiment, the initial event module  202  determines with which user interaction a detected initial user input event is associated. In a further embodiment, a single user input event may be associated with several different user interactions and the initial event module  202  may not initially determine with which user interaction a detected initial user input event is associated. 
     In one embodiment, one type of initial user input event includes the user  108  dragging an item  120  from the source user interface component  112  using the user input device  106 , as part of a drag-and-drop user interaction or the like. In a further embodiment, an initial user input event includes a specific type of dragging, such as dragging an item  120  over an edge of the source user interface component  112 , dragging a predefined item  120  or type of item  120 , dragging an item  120  in a predefined direction, dragging an item  120  from the source user interface component  112  over an edge of the target user interface component  114 , dragging an item  120  from the source user interface component  112  toward the target user interface component  114 , and/or another predefined dragging user input event. 
     In a further embodiment, one type of initial user input event includes a user selection of an option from an item  120  of the source user interface component  112 , such as a user selection of an element from a palette, or the like. The user selection, in one embodiment, is for use in the target user interface component  114 . In light of this disclosure, one of skill in the art will recognize other types of initial user input events that the initial event module  202  may detect. 
     In one embodiment, the transparent component module  204  places the transparent user interface component  116  over the target user interface component  114 . The transparent component module  204 , in a further embodiment, places the transparent user interface component  116  in response to the initial event module  202  detecting an initial user input event. In one embodiment, the transparent component module  204  places the transparent user interface component  116  logically above the target user interface component  114  in the GUI  110 . 
     By placing the transparent user interface component  116  over the target user interface component  114 , in one embodiment, the transparent user interface component  116  intercepts user input to the target user interface component  114 . The transparent user interface component  116 , in a further embodiment, intercepts user input substantially imperceptibly, so that it appears to the user  108  that the target user interface component  114  receives the user input. In one embodiment, the transparent user interface component  116  is invisible in the GUI  110  so that the target user interface component  114  is visible beneath it. 
     The transparent user interface component  116 , in one embodiment, is sized to be at least as large as the target user interface component  114 , to cover the target user interface component  114 . In a further embodiment, the transparent user interface component  116  is sized to be at least as large as a predefined subcomponent of the target user interface component  114  that is associated with a user interaction. For example, the transparent user interface component  116  may be sized to cover a predefined item  120  of the target user interface component, such as a text box, a menu, an image, or the like. In another embodiment, the transparent user interface component  116  is sized to cover the entire GUI  110  so that the transparent user interface component  116  intercepts substantially all user input to the GUI  110 . 
     In one embodiment, the interaction event module  206  detects an interaction user input event to the transparent user interface component  116 . An interaction user input event, in one embodiment, continues a user interaction between the source user interface component  112  and the target user interface component  114 . In a further embodiment, an interaction user input event occurs toward an end of a user interaction. An interaction user input event, in another embodiment, marks a completion of a user interaction by the user  108 . For example, one embodiment of an interaction user input event includes the user  108  dropping an item  120  over the target user interface component  114 . In another embodiment, where a user interaction is associated with selection of an item  120  from the source user interface component  112 , an interaction user input event may include a selection of a use for the item  120  in the target user interface component  114 . 
     The transparent user interface component  116 , in one embodiment, intercepts the interaction user input event. The interaction event module  206 , in one embodiment, uses the transparent user interface component  116  to detect an interaction user input event. In a further embodiment, the interaction event module  206  also detects a location of the interaction user input event in the GUI  110 . The interaction event module  206 , in various embodiments, may detect the location of the interaction user input event as a location of the pointer  122 , a location of an item  120  associated with the interaction user input event, or the like. The location of the interaction user input event, in one embodiment, includes coordinates of the user input event in the GUI  110 . 
     In another embodiment, the interaction event module  206  detects the location of the interaction user input event relative to the transparent user interface component  116  and/or the target user interface component  114 . For example, in various embodiments, the interaction event module  206  may detect the location as a location, coordinate, or the like within a user interface component; as a region, quadrant, sector, or the like of a user interface component; as an item  120  associated with an interaction user input event within a user interface component; and/or another location relative to the transparent user interface component  116  or the target user interface component  114 . The interaction event module  206 , in one embodiment, receives a location of an interaction user input event from the GUI  110 , using a framework of the GUI  110 , or the like. 
     In a further embodiment, the interaction event module  206  captures, receives, and/or determines information associated with the interaction user input event. Information associated with the interaction user input event, in various embodiments, may include text input from the user  120 , an item  120  of the target user interface component  114  associated with the interaction user input event, a gesture associated with the interaction user input event, a selection by the user  108  associated with the interaction user input event, and/or other information associated with the interaction user input event. 
     In one embodiment, the interaction communication module  208  communicates information of a user interaction to the target user interface component  114  using the communications channel  118 . Information of a user interaction, in one embodiment, is based on the initial user input event and/or the interaction user input event. In a further embodiment, information of a user interaction may include a command corresponding to the user interaction. In another embodiment, information of a user interaction may include one or more locations, items  120 , and/or other parameters associated with the user interaction. In one embodiment, information of a user interaction includes a location of an interaction user input event that the interaction event module  206  determines. The information of a user interaction, in an additional embodiment, includes an item  120 , a selection, an element, or the like of the source user interface component  112  associated with the user interaction. In one embodiment, the information of a user interaction allows the target user interface component  114  to fulfill the user interaction. 
     The interaction communication module  208 , in one embodiment, communicates information of a user interaction using an API call to the target user interface component  114 , a supported communications format of the target user interface component  114 , a supported command format of the target user interface component  114 , a supported file format of the target user interface component  114 , a supported protocol of the target user interface component  114 , a supported language of the target user interface component  114 , or another supported communications channel  118  of the target user interface component  114 . 
       FIG. 3  depicts another embodiment of the GUI component interaction module  124 . In the depicted embodiment the GUI component interaction module  124  includes the initial event module  202 , the transparent component module  204 , the interaction event module  206 , and the interaction communication module  208  and further includes a compatibility module  302 , a translation module  304 , a cancellation module  306 , a removal module  308 , and a component location module  310 . The GUI component interaction module  124 , in one embodiment, is substantially similar to the GUI component interaction module  124  described above with regard to  FIG. 1  and  FIG. 2 . 
     In one embodiment, the compatibility module  302  determines that a user interaction is suitable for communicating to the target user interface component  114  using the communications channel  118 . The compatibility module  302 , in one embodiment, determines that a known communications channel  118  exists between the source user interface component  112  and the target user interface component  114 . In a further embodiment, the compatibility module  302  determines that the target user interface component  114  is of a type that the interaction communication module  208  supports. In another embodiment, the compatibility module  302  determines that the target user interface component  114  supports the user interaction over the communications channel  118 . 
     The compatibility module  302 , in one embodiment, matches the target user interface component  114  to a set of supported user interface components, software applications, or the like. In a further embodiment, the compatibility module  302  matches a user interaction to a set of supported user interactions. The set of supported user interactions, in one embodiment, is specific to the type of target user interface component  114 . The compatibility module  302 , in one embodiment, may determine a type of the target user interface component  114 , a type of the user interaction, or the like based on the initial user input event and/or on the interaction user input event. 
     In one embodiment, the translation module  304  determines information of the user interaction for the interaction communication module  208 . The translation module  304 , in a further embodiment, determines the information of the user interaction by translating the initialization user input event and/or the interaction user input event into a format supported by the target user interface component  114 . The information of the user interaction, in one embodiment, includes a command that the translation module  304  selects, populates, and/or formats. In one embodiment, the translation module  304  selects a command corresponding to a user interaction based on the initial user input event and/or the interaction user input event. For example, the translation module  304 , in one embodiment, may translate a drag-and-drop user interaction (i.e. a dragging initial user input event and a dropping interaction user input event, or the like) into a command or another communication providing a dragged item  120  to the target user interface component  114 . In another example, the translation module  304  translates a drag-and-drop user interaction into a “create note” command, or the like, for the target user interface component  114 . 
     In one embodiment, the cancellation module  306  detects a cancellation event indicating that the user  108  has aborted a user interaction between the source user interface component  112  and the target user interface component  114 . The cancellation module  306 , in a further embodiment, removes the transparent user interface component  116  from the target user interface component  114  in response to detecting the cancellation event. A cancellation event, in various embodiments, may include the user  108  exceeding a predefined timeout period between an initial user input event and an interaction user input event, the user  108  pressing and/or releasing a predefined button or key (such as the escape key or the like), a user interaction with a user interface component other than the target user interface component  114 , the user  108  moving the pointer  122  outside of the target user interface component  114 , or the like. 
     In one embodiment, the removal module  308  removes the transparent user interface component  116  from the target user interface component  114  in response to the interaction user input event. By removing the transparent user interface component  116  from over the target user interface component  114  in the GUI  110 , in one embodiment, the removal module  308  allows the user  108  to interact directly with the target user interface component  114 , without the transparent user interface component  116  intercepting user input events. 
     In one embodiment, the component location module  310  determines a location in the GUI  110  for the transparent component module  204  to place the transparent user interface component  116 . The component location module  310 , in one embodiment, determines the location for the transparent user interface component  116  based on a location of the target user interface component  114 . The component location module  310 , in one embodiment, may determine the location of the target user interface component  114  based on a location at which the source user interface component  112  placed the target user interface component  114  or another known location for the target user interface component  114 . In another embodiment, the component location module  310  may determine the location of the target user interface component  114  based on information from the GUI  110 , an operating system associated with the GUI  110 , user input, or the like. 
       FIG. 4  depicts one embodiment of a drag-and-drop user interaction  400 . In the depicted embodiment, the user  108  selects an item  120  from a source location  402  of the source user interface component  112 . The user  108 , in the depicted embodiment, drags the item  120  from the source location  402  along a dragging path  404  to a target location  406  over the target user interface component  114  where the user  108  drops the item  120 . 
     In one embodiment, the initial event module  202  detects the user  108  dragging the item  120  from the source location  402  as an initial user input event. The initial event module  202 , in various embodiments, may detect initial dragging of the item  120  as an initial user input event, may detect dragging the item  120  over an edge of the source user interface component  112  as an initial user input event, may detect dragging the item  120  over an edge of the target user interface component  112  as an initial user input event, or may detect another indication that the user  108  is performing a user interaction between the source user interface component  112  and the target user interface component  114  as an initial user input event. 
     In the depicted embodiment, the transparent component module  204  places the transparent user interface component  116  over the target user interface component  114  in the GUI  110 . The transparent component module  204 , in one embodiment, places the transparent user interface component  116  in response to the initial event module  202  detecting an initial user input event. The transparent user interface component  116 , in one embodiment, intercepts the user dropping the item  120  over the target user interface component  114  at the target location  406 . 
     The interaction event module  206 , in one embodiment, detects the user dropping the item  120  over the target user interface component  114  as an interaction user input event. In a further embodiment, the interaction event module  206  additionally detects the target location  406  at which the user  108  drops the item  120 . The interaction communication module  208 , in one embodiment, communicates information of the user interaction to the target user interface component  114 . Information of the drag-and-drop user interaction, in various embodiments, may include a drag-and-drop command, the target location  406 , the item  120 , information of the item  120 , and/or other information of the drag-and-drop user interaction. 
       FIG. 5  depicts one embodiment of a palette selection user interaction  500 . In the depicted embodiment, the target user interface component  114  is displayed within the source user interface component  112 , as an embedded subcomponent, or the like. The user  108 , in the depicted embodiment, selects an item  120  from a palette  502  of the source user interface component  112  for use in the target user interface component  114 . Each item  120  of the palette  502 , in the depicted embodiment, includes a graphical pattern. Other embodiments of items  120  from a palette  502  may include colors, text formats, graphics formats, menu options, and/or other palette items. 
     In the depicted embodiment, the user  108  selects a target item  504  in the target user interface component  114  for use of the selected item  120 . The target item  504 , in the depicted embodiment, is illustrated as a tree type shape which the user  108  selected for use of the pattern from the selected item  120  of the source user interface component  112 . The target user interface component  114 , in one embodiment, uses the selected item  120  for the target item  504 . In the depicted embodiment, the target user interface component  114  fills the target item  504  with the graphical pattern of the selected item  120 . 
     In one embodiment, the initial event module  202  detects the user  108  selecting the item  120  from the palette  502  of the source user interface component  112  as an initial user input event. The transparent component module  204 , in the depicted embodiment, places the transparent user interface component  116  over the target user interface component  114  in the GUI  110  in response to the initial event module  202  detecting an initial user input event. The transparent user interface component  116 , in a further embodiment, intercepts the user&#39;s selection of the target item  504  over the target user interface component  114 . 
     The interaction event module  206 , in one embodiment, detects the user&#39;s selection of a use for the selected item  120  (i.e. selecting the target item  504 ) over the target user interface component  114  as an interaction user input event. In a further embodiment, the interaction event module  206  additionally detects a target location  406  at which the user  108  selects the target item  504 . The interaction communication module  208 , in one embodiment, communicates information of the user interaction to the target user interface component  114 . Information of the palette selection user interaction, in various embodiments, may include a palette selection command, the target location  406 , the selected item  120  from the palette  502 , information of the selected item  120 , and/or other information of the palette selection user interaction. 
       FIG. 6  depicts one embodiment of a method  600  for enabling user interactions between user interface components  112 ,  114 . In the depicted embodiment, the method  600  begins and the initial event module  202  determines  602  whether the GUI  110  and/or the source user interface component  112  have received an initial user input event associated with a user interaction between the source user input component  112  and the target user input component  114 . For example, in various embodiments, the initial event module  202  may determine  602  whether the GUI  110  and/or the source user input component  112  have received an initial user input event by detecting the user  108  dragging an item  120 , selecting an item  120 , or the like. 
     If the initial event module  202  determines  602  that the GUI  110  and/or the source user interface component  112  have not received an initial user input event from the user  108 , in the depicted embodiment, the initial event module  202  waits at the determining step  602 , monitoring the GUI  110  and/or the source user interface component  112  for an initial user input event. If the initial event module  202  determines  602  that the GUI  110  and/or the source user interface component  112  have received an initial user input event from the user  108 , in the depicted embodiment, the transparent component module  204  places  604  the transparent user interface component  116  over the target user interface component  114 . 
     The interaction event module  206 , in the depicted embodiment, determines  606  whether the transparent user interface component  116  has received an interaction user input event that continues the user interaction between the source user input component  112  and the target user interface component  114 . For example, in various embodiments, the interaction event module  206  may determine  606  whether the transparent user interface component  116  has received an interaction user input event by detecting the user  108  dropping an item  120  over the target user interface component  114 , detecting the user  108  selecting a use for an item  120  in the target user interface component  114 , or the like. 
     If the interaction event module  206  determines  606  that the transparent user interface component  116  has not received an interaction user input event, in the depicted embodiment, the interaction event module  206  waits at the determining step  606 , monitoring the transparent user interface component  116  for an interaction user input event. If the interaction event module  206 , in the depicted embodiment, determines  606  that the transparent user interface component  116  has received an interaction user input event, the interaction communication module  208  communicates  608  information of the user interaction to the target user interface component  114  using the communications channel  118  and the method  600  ends. 
       FIG. 7  depicts another embodiment of a method  700  for enabling user interactions between user interface components  112 ,  114 . In the depicted embodiment, the method  700  begins and the initial event module  202  determines  702  whether the GUI  110  and/or the source user interface component  112  have received an initial user input event associated with a user interaction between the source user input component  112  and the target user input component  114 . 
     If the initial event module  202  determines  702  that the GUI  110  and/or the source user interface component  112  have not received an initial user input event from the user  108 , in the depicted embodiment, the initial event module  202  waits at the determining step  702 , monitoring the GUI  110  and/or the source user interface component  112  for an initial user input event. If the initial event module  202  determines  702  that the GUI  110  and/or the source user interface component  112  have received an initial user input event from the user  108 , in the depicted embodiment, the component location module  310  determines  704  a location in the GUI  110  for the transparent user interface component  116 . The component location module  310 , in one embodiment, determines  704  the location based on a location of the target user interface component  114 . In another embodiment, a location of the target user interface component  114  is known so the component location module  310  does not determine  704  a location. The transparent component module  204 , in the depicted embodiment, places  706  the transparent user interface component  116  over the target user interface component  114  and the transparent user interface component  116  intercepts  708  user input to the target user interface component  114 . 
     The interaction event module  206 , in the depicted embodiment, determines  710  whether the transparent user interface component  116  has received an interaction user input event that continues the user interaction between the source user input component  112  and the target user interface component  114 . If the interaction event module  206  determines  710  that the transparent user interface component  116  has not received an interaction user input event, in the depicted embodiment, the cancellation module  306  determines  712  whether the GUI  110  has received a cancellation event indicating that the user  108  has aborted the user interaction. If the cancellation module  306  determines  712  that the GUI  110  has received a cancellation event, the cancellation module  306  removes  714  the transparent user interface component  116  from the target user interface component  114  in the GUI  110 . 
     If the cancellation module  306  determines  712  that the GUI  110  has not received a cancellation event, the interaction event module  206  waits at the determining step  710 , monitoring the transparent user interface component  116  for an interaction user input event. If the interaction event module  206 , in the depicted embodiment, determines  710  that the transparent user interface component  116  has received an interaction user input event, the removal module  308  removes  716  the transparent user interface component  116  from the target user interface component  114  in the GUI  110 . 
     The compatibility module  302 , in the depicted embodiment, determines  718  whether the user interaction is suitable for communicating to the target user interface component  114  using the communications channel  118 . If the compatibility module  302  determines  718  that the user interaction is not suitable for communication to the target user interface component  114 , the method  700  ends. If the compatibility module  302  determines  718  that the user interaction is suitable for communication to the target user interface component  114 , in the depicted embodiment, the translation module  304  translates  720  the initialization user input event and/or the interaction user input event into a format supported by the target user interface component  114  to determine information of the user interaction. The interaction communication module  208  communicates  722  information of the user interaction, as translated  720  by the translation module  304 , to the target user interface component  114  using the communications channel  118  and the method  700  ends. Note that in other embodiments, the removal module  308  removes  716  the transparent user interface component  116  at a different step than indicated, such as after steps  718 ,  720 , and  722 . 
     The embodiments may be practiced in other specific forms. The described embodiments are to be considered in all respects only as illustrative and not restrictive. The scope of the invention is, therefore, indicated by the appended claims rather than by the foregoing description. All changes which come within the meaning and range of equivalency of the claims are to be embraced within their scope.